奇虎360_2017校园招聘笔试编程题第二题
今晚做了360的校招笔试题,编程题难度适中,在这里跟大家分享一下编程题的第二题。第二道题也不难想到思路,但是如果写法不当,可能无法满足题目的时间限制。
1、 题目
2、 输入输出及样例
3、 我的思路
最容易想到的思路就是从1到n判断每个数中的数组是否包含除0和1以后的字符。如果是,不计数,否则总数量加1。
4、 我的实现
import java.util.Scanner;public class Ti2
{ public static void main(String[] args){Scanner scanner = new Scanner(System.in);while(scanner.hasNextInt()){int n = scanner.nextInt();int count = 1;for(int i =2; i<=n; i++){char[] get = String.valueOf(i).toCharArray();int flag = 0;for(int j=0; j<get.length; j++){if(get[j] != '0' && get[j] != '1'){flag = 1;break;} } if(flag == 0){count++;} }System.out.println(count);}}
}
5、 第一次改进思路
但是以上实现通过率之后33.3%,提示是超时。经过简单的分析发现,可以通过输入n的位数来简化统计。当n的位数为k时,满足题设要求的数总量为(2的(k-1)次方)-1,再加上从10的k次方到n之间满足题设要求的数的总量。
6、 第一次改进后的实现
import java.util.Scanner;public class Ti21
{ public static void main(String[] args){Scanner scanner = new Scanner(System.in);while(scanner.hasNextInt()){int n = scanner.nextInt();int weishu = String.valueOf(n).length();int count = (int) (Math.pow(2, weishu-1)-1);for(int i = (int)Math.pow(10, weishu-1); i<=n; i++){char[] get = String.valueOf(i).toCharArray();int flag = 0;for(int j=0; j<get.length; j++){if(get[j] != '0' && get[j] != '1'){flag = 1;break;} } if(flag == 0){count++;} }System.out.println(count);}}
}
7、 第二次改进思路
经过改进后,通过率提升到了50%,提示仍然是超时。经过再次分析,发现上次改进中还是有些遗漏的地方。
输入的数为n,假定n的位数为k,k个1组成的数字为m。那么当n>=m时,满足题设要求的数的总量为(2的k次方)-1。当n小于m时,仍按照5中所述思路求解。
8、 第二次改进后的实现
import java.util.Scanner;public class Ti22
{public static void main(String[] args){ Scanner scanner = new Scanner(System.in);while(scanner.hasNextInt()){int n = scanner.nextInt(); int weishu = String.valueOf(n).length(); int count = 0;if(n >= generate(weishu)){count = (int) (Math.pow(2, weishu)-1);}else{count = (int) (Math.pow(2, weishu-1)-1);for(int i = (int)Math.pow(10, weishu-1); i<=n; i++){char[] get = String.valueOf(i).toCharArray();int flag = 0;for(int j=0; j<get.length; j++){if(get[j] != '0' && get[j] != '1'){flag = 1;break;} } if(flag == 0){count++;} }} System.out.println(count);}}//生成n个1组成的n位数public static int generate(int n){StringBuilder sb = new StringBuilder();for(int i=0; i<n; i++){sb.append("1");}return Integer.parseInt(sb.toString()); }
}
9、 总结
经过两次改进后终于100%通过测试。这个题目想到思路并不难,但是如果没有思考仔细就可能超出题目的时间限制。当然,如果哪位大神有更好的解法,还望不吝赐教,不胜感激。
奇虎360_2017校园招聘笔试编程题第二题相关推荐
- 奇虎360_2017校园招聘笔试编程题第一题
今晚做了360的校招笔试题,编程题难度适中,在这里跟大家分享一下编程题的第一题. 1. 题目 2. 输入输出及样例 3. 我的思路 这题应该看题目理解一下就有思路,最简单粗暴的就是创建一个二维数组in ...
- 2012年奇虎360校园招聘实习生笔试编程题
2012年奇虎360校园招聘实习生笔试编程题 1. 自己实现库函数 int atoi(const char* str); 注意两点:(1). 字符串中,符号位的处理. (2).字符串中,出现非数字 ...
- 奇虎360 2015校园招聘笔试编程题
题目一: 写一个函数,根据两文件的绝对路径算出相对路径. 如a="/qihoo/app/a/b/c/d/new.c",b="/qihoo/app/1/2/test.c&q ...
- 2016奇虎360校园招聘编程题目
1.给个一个正整数n<1000000,以素数相乘的形式输出n的值,如20=2*2*5;10=2*5;2=2,而输出的素数都是按计算器上面的数字来显示的,即每个数字都是以如下形式来输出的 首先要解 ...
- 商汤科技 2019校园招聘笔试编程题-2018.09.07
本来阿里和商汤冲突了,就放弃了阿里的劝退型笔试,结果,商汤也劝退,只发一下题目做参考吧!知道题解的同学可以在评论区粘上链接,我会随时更新并加以感谢的.
- 滴滴 2019校园招聘笔试编程题-2018.09.18
输入: slep slap sleep step shoe shop snap slep 输出: slep slap step 代码是交卷后写出来的,没有经过测试,不知道是否能够AC 利用DP求出每个 ...
- 奇虎360校园招聘2015笔试题目
- 京东2015校园招聘笔试编程题
题目一: 请编写一个函数func,输入一个正整数n,返回一个最小的正整数m(m>9,即m至少包含两位数),使得m的各位乘积等于n,例如输入36,输出49:输入100,输出455,如果对于某个n不 ...
- 网新恒天2014校园招聘笔试编程题
已知memcpy的函数为: void* memcpy(void *dest , const void* src , size_t count)其中dest是目的指针,src是源指针.不调用c++/c的 ...
最新文章
- JUC系列(二)回顾Synchronized关键字
- html.renderaction 控制器,Html.RenderAction简单用法
- c#推箱子小游戏代码_推箱子小游戏V1.0制作
- 服务化改造实践 | 如何在 Dubbo 中支持 REST 1
- JavaBean和Servlet
- javascript核心_只需几分钟即可学习这些核心JavaScript概念
- json和python中字典的区别和联系_python中字典和json的区别
- 國外空間亂碼解決方法
- 常用的工具网站和收藏文章
- JavaSE基础——网络编程
- 【英雄联盟动画-双城之战】10点首播!6亿召唤师快来
- java 生成中文字符乱码,java汉字乱码的原因与解决方法
- 贪心算法适用条件_贪心算法问题
- 格式工厂 wav 比特率_鸡娃常用工具系列一格式工厂(音频转换软件)
- 远程桌面连接设置详细步骤
- 利用python进行微信好友数据分析
- 《程序员的职业素养》读书笔记万字总结【建议收藏】
- 大型医院 HIS源码
- 软考可以不考初级直接考中级吗?
- Spring高级四十九讲笔记
热门文章
- error: cannot use promoted field in struct literal of type [duplicate]
- 【第一个项目开发】创建domain包中的类
- window内置对象和js内置对象与方法
- leetcode 971. Flip Binary Tree To Match Preorder Traversal
- 中国教育培训机构市场运营状况与投资咨询预测报告2022年版
- Unix/Linux编程:解析路径名------realpath()
- 使用Python将多个单独的Excel文件整合到一个Excel文件的不同工作表里
- Matlab:连续按键、移动鼠标、鼠标点击、鼠标连点、输入字符,10行代码即可。
- 企立方:为什么拼多多关键词搜不到自己的产品
- 如何统计Android的代码行数