今晚做了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校园招聘笔试编程题第二题相关推荐

  1. 奇虎360_2017校园招聘笔试编程题第一题

    今晚做了360的校招笔试题,编程题难度适中,在这里跟大家分享一下编程题的第一题. 1. 题目 2. 输入输出及样例 3. 我的思路 这题应该看题目理解一下就有思路,最简单粗暴的就是创建一个二维数组in ...

  2. 2012年奇虎360校园招聘实习生笔试编程题

    2012年奇虎360校园招聘实习生笔试编程题 1.  自己实现库函数 int atoi(const char* str);  注意两点:(1). 字符串中,符号位的处理. (2).字符串中,出现非数字 ...

  3. 奇虎360 2015校园招聘笔试编程题

    题目一: 写一个函数,根据两文件的绝对路径算出相对路径. 如a="/qihoo/app/a/b/c/d/new.c",b="/qihoo/app/1/2/test.c&q ...

  4. 2016奇虎360校园招聘编程题目

    1.给个一个正整数n<1000000,以素数相乘的形式输出n的值,如20=2*2*5;10=2*5;2=2,而输出的素数都是按计算器上面的数字来显示的,即每个数字都是以如下形式来输出的 首先要解 ...

  5. 商汤科技 2019校园招聘笔试编程题-2018.09.07

    本来阿里和商汤冲突了,就放弃了阿里的劝退型笔试,结果,商汤也劝退,只发一下题目做参考吧!知道题解的同学可以在评论区粘上链接,我会随时更新并加以感谢的.

  6. 滴滴 2019校园招聘笔试编程题-2018.09.18

    输入: slep slap sleep step shoe shop snap slep 输出: slep slap step 代码是交卷后写出来的,没有经过测试,不知道是否能够AC 利用DP求出每个 ...

  7. 奇虎360校园招聘2015笔试题目

  8. 京东2015校园招聘笔试编程题

    题目一: 请编写一个函数func,输入一个正整数n,返回一个最小的正整数m(m>9,即m至少包含两位数),使得m的各位乘积等于n,例如输入36,输出49:输入100,输出455,如果对于某个n不 ...

  9. 网新恒天2014校园招聘笔试编程题

    已知memcpy的函数为: void* memcpy(void *dest , const void* src , size_t count)其中dest是目的指针,src是源指针.不调用c++/c的 ...

最新文章

  1. JUC系列(二)回顾Synchronized关键字
  2. html.renderaction 控制器,Html.RenderAction简单用法
  3. c#推箱子小游戏代码_推箱子小游戏V1.0制作
  4. 服务化改造实践 | 如何在 Dubbo 中支持 REST 1
  5. JavaBean和Servlet
  6. javascript核心_只需几分钟即可学习这些核心JavaScript概念
  7. json和python中字典的区别和联系_python中字典和json的区别
  8. 國外空間亂碼解決方法
  9. 常用的工具网站和收藏文章
  10. JavaSE基础——网络编程
  11. 【英雄联盟动画-双城之战】10点首播!6亿召唤师快来
  12. java 生成中文字符乱码,java汉字乱码的原因与解决方法
  13. 贪心算法适用条件_贪心算法问题
  14. 格式工厂 wav 比特率_鸡娃常用工具系列一格式工厂(音频转换软件)
  15. 远程桌面连接设置详细步骤
  16. 利用python进行微信好友数据分析
  17. 《程序员的职业素养》读书笔记万字总结【建议收藏】
  18. 大型医院 HIS源码
  19. 软考可以不考初级直接考中级吗?
  20. Spring高级四十九讲笔记

热门文章

  1. error: cannot use promoted field in struct literal of type [duplicate]
  2. 【第一个项目开发】创建domain包中的类
  3. window内置对象和js内置对象与方法
  4. leetcode 971. Flip Binary Tree To Match Preorder Traversal
  5. 中国教育培训机构市场运营状况与投资咨询预测报告2022年版
  6. Unix/Linux编程:解析路径名------realpath()
  7. 使用Python将多个单独的Excel文件整合到一个Excel文件的不同工作表里
  8. Matlab:连续按键、移动鼠标、鼠标点击、鼠标连点、输入字符,10行代码即可。
  9. 企立方:为什么拼多多关键词搜不到自己的产品
  10. 如何统计Android的代码行数