這個作業屬於哪個課程 | 計科二班 |
---|---|
這個作業要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-2/homework/11757 |
這個作業的目標 | 回顧表達式,數據類型 |
學號 | <20208994 |
1 題目:給定一個十進制正整數N,寫下從1開始,到N的所有整數,然后數一下其中出現的所有“1”的個數。
1.寫出一個函數f(N),返回1到N之間出現的”1“的個數,比如f(12)=5;
2.滿足條件”f(N)=N“的最大的N是多少?
例如:
N=2,寫下1,2。這樣只出現了1個”1“。
N=12,我們會寫下1,2,3,4,5,6,7,8,9,10,11,12。這樣,1的個數是5。
要求:
1.貼出代碼圖片,寫出解題思路,列出測試數據(5分)
解題思路:運用for循環通過不斷累加將n——N范圍內的數依次傳遞給下一個語句,在使用while循環求出n-N范圍內位數唯一的個數。
輸入數據 | 12 | 333 | 222 | 15674548 |
---|---|---|---|---|
輸出數據 | 5 | 174 | 153 | 1561636458 |
2.給出不同測試數據的運算時間,如果你的運算時間不變,說明你的測試數據不夠大(5分)
測試數據:
N | num | 運算時間 |
---|---|---|
12 | 5 | 0.000000 |
333 | 174 | 0.000000 |
15645487 | 17074187 | 0.001000 |
3.思考針對足夠大的數據,如何減少運算時間,並給出在原有算法基礎上的改進算法和改進思路。(10分)
改進算法:開始使用的嵌套函數,使用兩個函數分別用於讀取1的個數和判斷“f(n)==n”,改進算法后,使用一個函數(如上),減少了運算時間
改進思路:對最大的數據不同位數進行分析;
<1> 1位數情況:
可以直接觀察,可以發現,N是個位數時,N >=1,那么f(N)= 1;N = 0,f(N)= 0;
<2> 2位數情況:
個位和十位的數字上都可能有1,我們可以將它們分開來考慮,個位出現1的次數有兩次,十位出現1的次數有4次
<3> 3位數情況:
個位出現1的個數為13,十位出現1的個數為20,百位出現1的個數為24;
。。。依次分析更高位數,詳情見參考文獻:https://blog.csdn.net/sjf0115/article/details/8600599
2.2 將上題中多組測試數據寫入文件,並給出測試程序以檢測你的代碼有沒有問題,貼出你的代碼、運行結果和文件內容。
代碼:
運行結果:
文件內容:
2.3 用自己的語言回答兩個問題,並給出所查閱資料的引用(10分)
1.什么是文件緩沖系統?工作原理如何?
ANSIC 標准采用“緩沖文件系統”處理的數據文件的,所謂緩沖文件系統是指系統自動地在內存中為程序中每一個正在
使用的文件開辟一塊“文件緩沖區”。從內存向磁盤輸出數據會先送到內存中的緩沖區,裝滿緩沖區后才一起送到磁盤
上。如果從磁盤向計算機讀入數據,則從磁盤文件中讀取數據輸入到內存緩沖區(充滿緩沖區),然后再從緩沖區逐
個地將數據送到程序數據區(程序變量等)。緩沖區的大小根據C編譯系統決定。
2.什么是文本文件和二進制文件?
文本文件:一種計算機文件,它是一種典型的順序文件,其文件的邏輯結構又屬於流式文件。以ASCII碼方式存儲的文件,文本文件中除了存儲文件有效字符信息(包括能用ASCII碼字符表示的回車、換行等信息)外,不能存儲其他任何信息。
二進制文件:即指文件由文件在外部設備的存放形式為二進制而得名,由很多行字符構成的計算機文件
2.4 請給出本周學習總結(15分)
1 學習進度條(5分)
2 累積代碼行和博客字數(5分)
3 學習內容總結和感悟(5分)
1.在面對越來越復雜的代碼的情況下,一次次想放棄,但又一次次爬起,努力的去完成這次作業
2.看到與同學的差距,感覺自己越來越遠,他們做這次信手捏來,而我卻只能慢慢的在網絡上尋找
3.以后要多多預習和多多復習