面试题:4亿里有多少个1(11算2个)
创始人
2024-07-26 06:10:22
0

面试题:4亿里有多少个1(11算2个)

乍看这题真够唬人的,群里看到这个题目后争先恐后的说看法。最简单的办法不外乎就是遍历每个数,然后toString() 看看里面有多少个1,最后全部加起来,这是我们得到标准答案的办法。

群里算上我3个人写了3个笨方法都跑出来了,3个笨方法,呵呵 有意思,笨方法也不一样。 程序的实现真是变幻莫测。

  1. var re = /1{1}/g;   
  2. var max = 4 * 10000 * 10000;   
  3. getTotal(f);   
  4. getTotal(f1);   
  5. getTotal(f2);   
  6. function getTotal(func)   
  7. {   
  8. var total = 0;   
  9. var begin = new Date();   
  10. for(var i= 1 ;i <= max;i++)   
  11. {   
  12. total += func(i);   
  13. }   
  14. var end = new Date();   
  15. var timespan = end - begin;   
  16. alert("开始时间:"+begin + "\n 结束时间:"+end +"\n总耗时:"+timespan + "毫秒 \n 总数:"+total);   
  17. }   
  18. function f(num)   
  19. {   
  20. var t = 0;   
  21. while(num)   
  22. {   
  23. if(num < 10){ if(num==1)t++;break;}   
  24. var i = num % 10;   
  25. if(i == 1) t++;   
  26. num = parseInt(num / 10);   
  27. }   
  28. return t;   
  29. }   
  30. function f1(num)   
  31. {   
  32. var str = num.toString()   
  33. var t = 0;   
  34. for(var i=0;i
  35. {   
  36. if(str.charAt(i)=="1") t++;   
  37. }   
  38. return t;   
  39. }   
  40. function f2(num)   
  41. {   
  42. var str = num.toString();   
  43. var t = 0;   
  44. while(re.exec(str))   
  45. {   
  46. t++;   
  47. }   
  48. return t;   
  49. }  

当数量少的时候第一种最快,显然嘛,没有处理字符串的步骤。按理说数量越大他越有优势。 可是实测结果,3个都差不多。但是用C#跑的话,第一个明显越来越有优势。。。。

但是出题人肯定不是这样想的,很多人都在说自己的技巧与看法,我也思考了很久。

先拿 100来说 ,100里面有多少个1?

 

  1. 10  
  2. 11  
  3. 12  
  4. 13  
  5. 14  
  6. 15   
  7. 16   
  8. 17   
  9. 18   
  10. 19   
  11. 01   
  12. 11   
  13. 21   
  14. 31   
  15. 41   
  16. 51   
  17. 61   
  18. 71   
  19. 81   
  20. 91 

 

故意这么排列是我们可以把 0~99看作是 1个长度为2的数组, 1位为1时,2位的可能性是10,2位为1时1位的可能性为10,所以 0~99应该有20个1,而100有1个所以是21个。

999就应该是 1*10*10 + 10*1*10 + 10*10*1 = 300

400呢? 因为首位只能出现0~3 ,所以应该是 1*10*10 + 4*1*10 + 4*1*10

4 0000 0000 应该是 1 * (10^8) + 4*(10^7) * 8 = 420000000

通过本文的分析,你是不是了解了呢??程序真的是太变化莫测了,同样,一道题当然有不同的解法。如果你有,我们可以一同分享。

【编辑推荐】

  1. 三大鼎足IT名企面试题
  2. 1.4.3 有趣的微软面试题目
  3. 深入剖析C/C++程序员应聘常见面试题
  4. 应届毕业生应聘求职:25个刁钻面试题解析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...