黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

首頁 - 網校 - 萬題庫 - 直播 - 雄鷹網校 - 團購 - 書城 - 模考 - 學習通 - 導航 -
首頁網校萬題庫直播雄鷹網校團購書城模考論壇實用文檔作文大全寶寶起名
2015中考
法律碩士
2015高考
MBA考試
2015考研
MPA考試
在職研
中科院
考研培訓
專升本
自學考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點日語
職稱英語
口譯筆譯
申碩英語
零起點韓語
商務英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點英語
托福考試
托業考試
零起點法語
雅思考試
成人英語三級
零起點德語
等級考試
華為認證
水平考試
Java認證
職稱計算機 微軟認證 思科認證 Oracle認證 Linux認證
公 務 員
導游考試
物 流 師
出版資格
單 證 員
報 關 員
外 銷 員
價格鑒證
網絡編輯
駕 駛 員
報檢員
法律顧問
管理咨詢
企業培訓
社會工作者
銀行從業
教師資格
營養師
保險從業
普 通 話
證券從業
跟 單 員
秘書資格
電子商務
期貨考試
國際商務
心理咨詢
營 銷 師
司法考試
國際貨運代理人
人力資源管理師
廣告師職業水平
衛生資格 執業醫師 執業藥師 執業護士
會計從業資格
基金從業資格
統計從業資格
經濟師
精算師
統計師
會計職稱
法律顧問
ACCA考試
初級會計職稱
資產評估師
高級經濟師
注冊會計師
高級會計師
美國注冊會計師
審計師考試
國際內審師
注冊稅務師
理財規劃師
一級建造師
安全工程師
設備監理師
公路監理師
公路造價師
二級建造師
招標師考試
物業管理師
電氣工程師
建筑師考試
造價工程師
注冊測繪師
質量工程師
巖土工程師
注冊給排水
造價員考試
注冊計量師
環保工程師
化工工程師
暖通工程師
咨詢工程師
結構工程師
城市規劃師
材料員考試
消防工程師
監理工程師
房地產估價
土地估價師
安全評價師
房地產經紀人
投資項目管理師
環境影響評價師
土地登記代理人
寶寶起名
繽紛校園
實用文檔
入黨申請
英語學習
思想匯報
作文大全
工作總結
求職招聘 論文下載 直播課堂
您現在的位置: 考試吧 > 軟件水平考試 > 復習資料 > 程序員 > 正文

2015年軟件水平考試程序員精選題(13)

來源:考試吧 2015-01-20 9:09:45 考試吧:中國教育培訓第一門戶 模擬考場
考試吧整理“2015年軟件水平考試程序員精選題(13)”供考生參考,更多軟件水平考試資訊和備考資料請關注考試吧軟件水平考試網。

  查看匯總:2015軟件水平考試程序員精選題匯總

  在從1到n的正數中1出現的次數

  題目:輸入一個整數n,求從1到n這n個整數的十進制表示中1出現的次數。

  例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。

  分析:這是一道廣為流傳的google面試題。用最直觀的方法求解并不是很難,但遺憾的是效率不是很高;而要得出一個效率較高的算法,需要比較強的分析能力,并不是件很容易的事情。當然,google的面試題中簡單的也沒有幾道。

  首先我們來看最直觀的方法,分別求得1到n中每個整數中1出現的次數。而求一個整數的十進制表示中1出現的次數,就和本面試題系列的第22題很相像了。我們每次判斷整數的個位數字是不是1。如果這個數字大于10,除以10之后再判斷個位數字是不是1。基于這個思路,不難寫出如下的代碼:

  int NumberOf1(unsigned int n);

  /////////////////////////////////////////////////////////////////////////////

  // Find the number of 1 in the integers between 1 and n

  // Input: n - an integer

  // Output: the number of 1 in the integers between 1 and n

  /////////////////////////////////////////////////////////////////////////////

  int NumberOf1BeforeBetween1AndN_Solution1(unsigned int n)

  {

  int number = 0;

  // Find the number of 1 in each integer between 1 and n

  for(unsigned int i = 1; i <= n; ++ i)

  number += NumberOf1(i);

  return number;

  }

  /////////////////////////////////////////////////////////////////////////////

  // Find the number of 1 in an integer with radix 10

  // Input: n - an integer

  // Output: the number of 1 in n with radix

  /////////////////////////////////////////////////////////////////////////////

  int NumberOf1(unsigned int n)

  {

  int number = 0;

  while(n)

  {

  if(n % 10 == 1)

  number ++;

  n = n / 10;

  }

  return number;

  }

  這個思路有一個非常明顯的缺點就是每個數字都要計算1在該數字中出現的次數,因此時間復雜度是O(n)。當輸入的n非常大的時候,需要大量的計算,運算效率很低。我們試著找出一些規律,來避免不必要的計算。

  我們用一個稍微大一點的數字21345作為例子來分析。我們把從1到21345的所有數字分成兩段,即1-1235和1346-21345。

  先來看1346-21345中1出現的次數。1的出現分為兩種情況:一種情況是1出現在最高位(萬位)。從1到21345的數字中,1出現在10000-19999這10000個數字的萬位中,一共出現了10000(104)次;另外一種情況是1出現在除了最高位之外的其他位中。例子中1346-21345,這20000個數字中后面四位中1出現的次數是2000次(2*103,其中2的第一位的數值,103是因為數字的后四位數字其中一位為1,其余的三位數字可以在0到9這10個數字任意選擇,由排列組合可以得出總次數是2*103)。

  至于從1到1345的所有數字中1出現的次數,我們就可以用遞歸地求得了。這也是我們為什么要把1-21345分為1-1235和1346-21345兩段的原因。因為把21345的最高位去掉就得到1345,便于我們采用遞歸的思路。

  分析到這里還有一種特殊情況需要注意:前面我們舉例子是最高位是一個比1大的數字,此時最高位1出現的次數104(對五位數而言)。但如果最高位是1呢?比如輸入12345,從10000到12345這些數字中,1在萬位出現的次數就不是104次,而是2346次了,也就是除去最高位數字之后剩下的數字再加上1。

  基于前面的分析,我們可以寫出以下的代碼。在參考代碼中,為了編程方便,我把數字轉換成字符串了。

  #include "string.h"

  #include "stdlib.h"

  int NumberOf1(const char* strN);

  int PowerBase10(unsigned int n);

  /////////////////////////////////////////////////////////////////////////////

  // Find the number of 1 in an integer with radix 10

  // Input: n - an integer

  // Output: the number of 1 in n with radix

  /////////////////////////////////////////////////////////////////////////////

  int NumberOf1BeforeBetween1AndN_Solution2(int n)

  {

  if(n <= 0)

  return 0;

  // convert the integer into a string

  char strN[50];

  sprintf(strN, "%d", n);

  return NumberOf1(strN);

  }

  /////////////////////////////////////////////////////////////////////////////

  相關推薦:

  2015年軟考信息技術處理員考前知識點總結匯總

  2015年軟件水平考試《程序員》提高練習題匯總

  2015軟件水平考試《程序員》知識點總結匯總

文章責編:wangmeng  
看了本文的網友還看了
文章搜索
軟件水平考試欄目導航
版權聲明:如果軟件水平考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本軟件水平考試網內容,請注明出處。
Copyright © 2004- 考試吧軟件水平考試網 All Rights Reserved 
中國科學院研究生院權威支持(北京)
在線模擬試題
考證通關殺器
考試最新資訊
一次通關技巧
主站蜘蛛池模板: 国产成人女人在线视频观看 | 欧美综合自拍亚洲综合图自拍 | 在线观看91精品国产性色 | 九九自拍视频 | 婷婷亚洲综合 | 午夜精品一区 | 97福利视频精品第一导航 | 最近免费中文字幕视频高清在线看 | 欧美精品束缚一区二区三区 | 成人欧美日韩高清不卡 | 欧美人与动交tv | 成人午夜动漫在线观看 | 最新欧美精品一区二区三区 | 国产网站免费 | 天堂网免费视频 | 草草视频手机在线观看视频 | 成人片在线看 | 嘿嘿视频在线观看 成人 | 成年性生交大片免费看 | 手机一级片 | 久久狠狠色狠狠色综合 | 色婷婷婷丁香亚洲综合不卡 | 福利视频第一页 | 成人免费观看视频久爱网 | 午夜视频在线观看视频 | 国产全黄三级国产全黄三级书 | 欧美日韩高清不卡免费观看 | 免费大香伊蕉在人线国产 | a网站免费 | 一区二区国产在线观看 | 亚洲精品视频观看 | 一道本不卡免费视频 | 97久久人人做人人爽人人澡 | 日本资源在线观看 | 91极品蜜桃臀在线播放 | 青春草在线观看精品免费视频 | 欧美精品一卡二卡 | 成人毛片免费观看视频 | 国产精品久久久久久亚洲伦理 | 久久精品国产2020观看福利色 | 欧美91 |