C 小練習 找零錢問題

2021-08-13 09:35:37 字數 1300 閱讀 4083

採用貪心演算法解決找零錢問題,如果需要找零57.8元,零錢數分別為(10元、5

元、1元、5

角、2角、1

角)1、採用元為單位編寫程式如下所示:

[cpp]

view plain

copy

#include

using

namespace

std;  

intmain()  

;  int

i,b[6]=;  

for(i=0;i<6;++i)  

cout<<"得到的結果為:"

<"="

;  for

( i=0;i<5;i++)  

cout<"*"

<

system("pause"

);  

return

0;  

}  

執行結果為:57.8=5*10+1*5+2*1+1*0.5+1*0.2+0*0.1

最後一位出現錯誤,導致實際結果只有57.7。

2、出現該錯誤的原因

單步除錯程式發現當輸入57.8時,計算機實際儲存的是57.799999,以致最後剩下的0.1元變成0.099999,0.099999/0.1=0。

計算機中對於浮點數的儲存:

按照ieee的浮點數表示方法,把浮點數57.8轉換為二進位制**。整數部分為57=32*1+16*1+8*1+4*0+2*0+1*1,得到其二進位制表示為:111001,小數部分0.8=0.5*1+0.25*1+0.125*0+0.0625*0+0.03125*1+.....,永遠算不完,所以導致儲存時存在誤差。

3、解決辦法

轉而採用角為單位,對輸入資料作放大處理(乘以10),程式**如下:

[cpp]

view plain

copy

#include

using

namespace

std;  

intmain()  

;  int

i,b[6]=;  

inttemp,total1=total*10;  

for(i=0;i<6;++i)  

cout<<"得到的結果為:"

<"="

;  for

( i=0;i<5;i++)  

cout<"*"

<

system("pause"

);  

return

0;  

}  

執行結果為:57.8=5*10+1*5+2*1+1*0.5+1*0.2+1*0.1

找零錢問題

問題描述 我們知道人民幣有1 2 5 10 20 50 100這幾種面值。現在給你n 1 n 250 元,讓你計算換成用上面這些面額表示且總數不超過100張,共有幾種。比如4元,能用4張1元 2張1元和1張2元 2張2元,三種表示方法。輸入有多組,每組一行,為乙個整合n。輸入以0結束。輸出該面額有幾...

找零錢問題

人民幣有1 2 5 10 20 50 100這幾種面值。現在給你n 1 n 250 元,讓你計算換成用上面這些面額表示且總數不超過100張,共有幾種。比如4元,能用4張1元 2張1元和1張2元 2張2元,三種表示方法。輸入有多組,每組一行,為乙個整合n。輸入以0結束。輸出該面額有幾種表示方法。使用動...

找零錢問題

這是一道比較有意思的題,在牛客網網直通bat演算法的題中看到。這裡坐下記錄 題 我們知道人民幣有1 2 5 10 20 50 100這幾種面值。現在給你n元,讓你計算換成用上面這些面額表示且總數不超過100張,共有幾種。比如4元,能用4張1元 2張1元和1張2元 2張2元,三種表示方法。這題是到動態...