偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

面試題:4億里有多少個1(11算2個)

開發(fā) 前端
對于我們進(jìn)入職場,當(dāng)然要經(jīng)過面試。下面就是面試中的一道題,讓我們起來看。

面試題:4億里有多少個1(11算2個)

乍看這題真夠唬人的,群里看到這個題目后爭先恐后的說看法。最簡單的辦法不外乎就是遍歷每個數(shù),然后toString() 看看里面有多少個1,最后全部加起來,這是我們得到標(biāo)準(zhǔn)答案的辦法。

群里算上我3個人寫了3個笨方法都跑出來了,3個笨方法,呵呵 有意思,笨方法也不一樣。 程序的實現(xiàn)真是變幻莫測。

  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 結(jié)束時間:"+end +"\n總耗時:"+timespan + "毫秒 \n 總數(shù):"+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<str.length;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. }  

當(dāng)數(shù)量少的時候第一種最快,顯然嘛,沒有處理字符串的步驟。按理說數(shù)量越大他越有優(yōu)勢。 可是實測結(jié)果,3個都差不多。但是用C#跑的話,第一個明顯越來越有優(yōu)勢。。。。

但是出題人肯定不是這樣想的,很多人都在說自己的技巧與看法,我也思考了很久。

先拿 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的數(shù)組, 1位為1時,2位的可能性是10,2位為1時1位的可能性為10,所以 0~99應(yīng)該有20個1,而100有1個所以是21個。

999就應(yīng)該是 1*10*10 + 10*1*10 + 10*10*1 = 300

400呢? 因為首位只能出現(xiàn)0~3 ,所以應(yīng)該是 1*10*10 + 4*1*10 + 4*1*10

4 0000 0000 應(yīng)該是 1 * (10^8) + 4*(10^7) * 8 = 420000000

通過本文的分析,你是不是了解了呢??程序真的是太變化莫測了,同樣,一道題當(dāng)然有不同的解法。如果你有,我們可以一同分享。

【編輯推薦】

  1. 三大鼎足IT名企面試題
  2. 1.4.3 有趣的微軟面試題目
  3. 深入剖析C/C++程序員應(yīng)聘常見面試題
  4. 應(yīng)屆畢業(yè)生應(yīng)聘求職:25個刁鉆面試題解析
責(zé)任編輯:于鐵 來源: 博客園
相關(guān)推薦

2014-09-02 11:04:49

PHP面試題PHP

2024-06-04 14:52:28

2019-09-30 08:50:51

Linux發(fā)行版內(nèi)核

2017-08-29 14:12:16

Java面試題

2014-12-02 10:02:30

2015-08-27 09:27:34

JavaScript面試題

2021-10-27 06:32:06

服務(wù)器JVM內(nèi)存

2011-07-18 15:08:19

SQL存儲過程

2021-06-02 12:12:46

DevOps面試Linux

2016-05-05 17:45:43

Spring面試題答案

2019-03-23 20:00:04

面試react.js前端

2023-09-26 16:44:14

光模塊

2025-01-09 12:00:00

JavaScript前端數(shù)組

2015-09-29 09:24:22

Node.js面試題

2015-08-19 09:35:49

Java main面試題

2012-08-02 09:36:58

fork面試題

2019-11-26 10:30:11

CSS前端面試題

2019-08-09 09:50:38

Java編程語言面試題

2019-01-02 16:31:33

程序員技術(shù)互聯(lián)網(wǎng)

2020-08-04 16:56:50

Java方法參數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號