自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

群里算上我3個(gè)人寫了3個(gè)笨方法都跑出來了,3個(gè)笨方法,呵呵 有意思,笨方法也不一樣。 程序的實(shí)現(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("開始時(shí)間:"+begin + "\n 結(jié)束時(shí)間:"+end +"\n總耗時(shí):"+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í)候第一種最快,顯然嘛,沒有處理字符串的步驟。按理說數(shù)量越大他越有優(yōu)勢。 可是實(shí)測結(jié)果,3個(gè)都差不多。但是用C#跑的話,第一個(gè)明顯越來越有優(yōu)勢。。。。

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

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

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

400呢? 因?yàn)槭孜恢荒艹霈F(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個(gè)刁鉆面試題解析
責(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面試題

2015-08-27 09:27:34

JavaScript面試題

2014-12-02 10:02:30

2021-06-02 12:12:46

DevOps面試Linux

2011-07-18 15:08:19

SQL存儲(chǔ)過程

2016-05-05 17:45:43

Spring面試題答案

2019-03-23 20:00:04

面試react.js前端

2021-10-27 06:32:06

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

2025-01-09 12:00:00

JavaScript前端數(shù)組

2015-09-29 09:24:22

Node.js面試題

2015-08-19 09:35:49

Java main面試題

2023-09-26 16:44:14

光模塊

2019-08-09 09:50:38

Java編程語言面試題

2019-11-26 10:30:11

CSS前端面試題

2012-08-02 09:36:58

fork面試題

2020-06-04 14:40:40

面試題Vue前端

2019-01-02 16:31:33

程序員技術(shù)互聯(lián)網(wǎng)
點(diǎn)贊
收藏

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