微软2016年4月实习生笔试第一题-font size题解

来源:互联网 发布:python exit code 0 编辑:程序博客网 时间:2024/05/21 11:34
这道题不是单纯的计算,而是一个根据目标函数,求s的最大值问题。运算逻辑是给s赋最大初值,然后不断s--,以达到目标函数。题目转换为屏幕字体匹配问题。
需要注意:
1、如何确定s字体大小的最大值(初值),因为字体是方的,而一页至少要有一个字母,所以,字体最大值是(W,H)min 有说初值选取可以进一步优化,选(W,H,P*H/S)min,这点没看。
2、确定目标函数,现在是给定了P,且带有s的函数计算值不能超过它,根据题意可得 (a[i]/(W/S))求和i=0~N-1每一段行数,求和为总行数,因为每一页行数是满的,但每一行字不一定是满的,总行数要<=P*H/S,因为s越大页数越大,所以要控制在p页内才行,s从max开始减小,满足条件,即跳出循环。
3、注意一点a[i]/(W/S)的时候,不能直接用int计算,因为存在除不尽的情况,这个时候需要判断a[i]%(W/S)是否为0,不为0表示有非满字行,所以要+1,即:
a[i]%(W/S)==0?0:1;否则计算总行数会错误,丢失精度

import java.util.Scanner;//微软笔试第一题 font size,AC,用最大化函数做,s字母是个方的,屏幕匹配问题,word等文本处理public class Main {/** * @param args */Main(Scanner in){int TASK = in.nextInt();String delet = in.nextLine();//废弃的一次流for(int i=0;i<TASK;i++){//输出循环,几个testcaseString args = in.nextLine();int[] iargs = argsCase(args);int[] a = new int[iargs[0]];for(int j=0;j<iargs[0];j++){a[j] = in.nextInt();}String delet2 = in.nextLine();int output = maxfontSize(iargs[0], iargs[1], iargs[2], iargs[3], a);System.out.println(output);}//可以不用再重新遍历,运算的时候一起输出结果in.close();}//用来储存一个testcase的参数public int[] argsCase(String args){String[] fargs = args.split(" ");int[] args2 = new int[4];for(int i=0;i<4;i++){args2[i] = Integer.parseInt(fargs[i]);}return args2;}public int maxfontSize(int N,int P,int W,int H,int a[]){int Smax = W>H?H:W;//s要赋初值的boolean b = true;if(1<=N && N<=1000 && 1<=W && W<=1000 && 1<=H && H<=1000 && 1<=P && P<=1000000 ){ while(b){//这个循环是减小Smax来达到目标函数,每循环一次,即计算一次 int character = W/Smax; int lines = H/Smax; int A = 0; for(int i=0;i<a.length;i++){ A+=(a[i]/character)+(a[i]%character==0?0:1);//总行数累加计算,A作为累加载体,后面的求余是因为存在一行不满字情况,上取整 } if(A<=P*lines){//循环边界,while do是先判断,在执行,所以存在临界点满足while但do后就不满足情况,do while相反 b = false; return Smax; }else{ Smax--; } }}return 0;}public static void main(String[] args) {// TODO 自动生成的方法存根Scanner in = new Scanner(System.in);Main  fonts = new Main(in);}}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 深圳公务员无房怎么办 深圳安居房回执遗失怎么办 社保网注册不了怎么办 深圳怎么办少儿医保卡 少儿没缴纳医保怎么办 上海辞职后社保怎么办 辞职去上学社保怎么办 辞职后异地社保怎么办 个人不想交社保怎么办 离职去异地社保怎么办 离职到外省社保怎么办 辞职去外省社保怎么办 永康光伏补贴怎么办? 找到工作后档案怎么办 夫妻离婚后户口怎么办 异地档案辞职后怎么办 去网吧没有招聘怎么办 建筑工地老板不给钱怎么办 2018高压电工证怎么办 深圳户口怎么办户口卡 在深圳找不到工作怎么办 亲戚户口不迁出怎么办 深圳集体户口准生证怎么办 天津集体户口怎么办准生证 深圳集体户离职户口怎么办 解析包出现错误怎么办 信息登记号没有怎么办 博士非211 985怎么办 下雨考科目二怎么办 公司新装修有甲醛怎么办 驾驶证c换证怎么办 科目一上课迟到怎么办 滴滴预约不到车怎么办 科目二考挂4次怎么办 车行易骗了怎么办 驾校倒闭了学费怎么办 如果驾校倒闭了怎么办 驾校倒闭了档案怎么办 驾校跑路了怎么办 规培名额不够怎么办 驾照理论不过关怎么办