微软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
- 微软2016年4月实习生笔试第一题-font size题解
- 微软2016实习生笔试--第一题Font Size
- 微软2016校招4月在线笔试——第一题 Font Size
- 微软2016校园招聘4月在线笔试:Font Size
- 微软2016年4月实习生笔试第三题-Demo Day题解
- 2016年微软在线笔试题之Font Size
- 微软2016校园招聘4月在线笔试1-Font Size
- hihocoder 1288:Font Size--微软2016校园招聘4月在线笔试
- 微软2016校园招聘4月在线笔试 hihocoder 1288 Font Size (模拟)
- Font Size(微软2016校园招聘4月在线笔试)
- 微软笔试 Font Size
- 微软笔试题1:Font Size
- [2016.4][微软笔试]Font Size
- 【hihocoder】Font Size(微软2016.4校招笔试题)
- 阿里2015年4月实习生招聘研发岗笔试题——RPC题解
- 微软2012暑假实习生笔试题解析
- 微软2012暑假实习生笔试题解析
- 微软2013暑假实习生笔试题解析
- leetcode笔记:Merge Two Sorted Lists
- cocoa pods 安装 WebViewJavascriptBridge 简明使用
- Mysql之各种各样的函数啦
- Mac装matlab2015b步骤
- 安卓app设计规范
- 微软2016年4月实习生笔试第一题-font size题解
- VS2010 专业版 报错:error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- android开发--drawerLayout和toolbar的结合使用
- c盘windows文件夹太大,installer文件夹太大
- Android 打包签名
- 2016.4. 半期 最小表示法 sequence
- MFC中修改控件的文字和颜色
- pthread_once()函数详解
- JDBC基础