採用貪心演算法解決找零錢問題,如果需要找零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元,三種表示方法。這題是到動態...