码迷,mamicode.com
首页 > 其他好文 > 详细

2016年微软机试题第一题——FontSize

时间:2016-04-07 01:18:17      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:N个段落 P个页面 W的段长 H的页长 一个数组给出每个段落的字数 目标找到符合要求的最大字符大小。

难点:(1)必须根据题目的描述,给出符合条件的字符输入方案;

        (2)使用二分法不断逼近可选择的最大字符大小;

        (3)如何利用判断表达式实现取整,和选择;

重要思想:最令人迷茫的地方在于,字符和段和页面之间的关系;必须要看清他们之间的层次关系;字符分割统计出段,段统计分割出现页面。利用页面的比较产生可行的结果。

 1 package shounue;
 2 import java.util.Scanner;
 3 public class FontSize {
 4     public static void main(String[] args) {
 5         Scanner cin = new Scanner(System.in);
 6         int number = cin.nextInt();
 7         while (number > 0){
 8             int n = cin.nextInt();
 9             int p = cin.nextInt();
10             int w = cin.nextInt();
11             int h = cin.nextInt();
12             int[] array = new int[n];
13             for (int i = 0;i < n;i++){
14                 array[i] = cin.nextInt();
15             }
16             int left = 1;
17             int right = Math.min(w, h);
18             int result = 0;
19             while (left <= right){
20                 int mid = (left + right) / 2;
21                 int column = w / mid;
22                 int row = h / mid;
23                 int count = 0;
24                 for (int i = 0;i < n;i++){
25                     count += ((array[i]%column) == 0 ? (array[i]/column) : (array[i]/column + 1));
26                 }
27                 int page = ((count%row) == 0 ? (count/row) : (count/row + 1));
28                 if (page <= p){
29                     result = mid;
30                     left = mid + 1;
31                 }else {
32                     right = mid - 1;
33                 }
34             }
35             System.out.println(result);
36             number--;
37         }
38     }
39 
40 }

 

2016年微软机试题第一题——FontSize

标签:

原文地址:http://www.cnblogs.com/ProWhalen/p/5361653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!