當前位置:首頁 » 操作系統 » 硬幣零錢演算法

硬幣零錢演算法

發布時間: 2023-01-30 08:14:00

⑴ 找零錢問題的貪心演算法

問題描述:
當前有面值分別為2角5分,1角,5分,1分的硬幣,請給出找n分錢的最佳方案(要求找出的硬幣數目最少)
問題分析:
根據常識,我們到店裡買東西找錢時,老闆總是先給我們最大面值的,要是不夠再找面值小一點的,直到找滿為止。如果老闆都給你找分數的或者幾角的,那你肯定不幹,另外,他也可能沒有那麼多零碎的錢給你找。其實這就是一個典型的貪心選擇問題。
問題的演算法設計與實現:
先舉個例子,假如老闆要找給我99分錢,他有上面的面值分別為25,10,5,1的硬幣數,為了找給我最少的硬幣數,那麼他是不是該這樣找呢,先看看該找多少個25分的, 99/25=3,好像是3個,要是4個的話,我們還得再給老闆一個1分的,我不幹,那麼老闆只能給我3個25分,由於還少給我24,所以還得給我2個10分的和4個1分。
具體實現
//找零錢演算法
//By falcon
//輸入:數組m,依次存放從大到小排列的面值數,n為需要找的錢數,單位全部為分
//輸出:數組num,對照數組m中的面值存放不同面值的硬幣的個數,即找錢方案

⑵ 演算法:找零錢,有4種硬幣1,2,5,10,將X和Y換成零錢,求所用的最少錢數 如:8,9,輸出4(1,2,2,5)

這個演算法相對較為簡單,使用大面值硬幣優先使用即可。
void getCoinList(int bigMoney)
{
int coinValues[] = {10, 5, 2, 1};
int coins[4] = {0};
int totalCoins = 0;
int surplusMoney = bigMoney;
int i = 0, j = 0;
for (i = 0; i < 4; i++)
{
coins[i] = surplusMoney / coinValues[i];
totalCoins += coins[i];
surplusMoney = bigMoney % coinValues[i];
}
printf("%d(", totalCoins);
for(i = 3; i >= 0; i--)
for(j = 0; j < coins[i]; j++)
{
if (--totalCoins > 0)
printf("%d ,", coinValues[i]);
else
printf("%d", coinValues[i]);
}
printf(")", coinValues[i]);
}

編程:換零錢。把一元錢全兌換成1分2分5分硬幣,有多少種兌換方法包括全1分或者全5分

這程序很好寫,不過關鍵是看演算法設計得怎麼樣,是不是最優的。我只寫一個最簡單的,自己嘗試優化下,這也是編程的樂趣之一。

int fCent; //5分個數
int tCent; //2分個數
int oCent; //1分個數
int count=0; //兌換方法個數
for(fCent=0;fCent<=20;fCent++)
{
for (tCent=0;tCent<=50;tCent++)
{
oCent=100-5*fCent-2*tCent;
if(oCent>=0) count++;
}
}

把上面程序放到main中就可以了,你想要的輸出就是count的值。還有看你說的題意,是否2分的不能是0個,如果有這個要求第二個for循環,也就是tCent 從1開始就可以了。
自己再去優化吧。

⑷ 將一筆零錢(大於8分,小於1元, 精確到分)換成5分、2分和1分的硬幣。

題目要求「各類硬幣數量依次從大到小的順序」,注意數量是從大到小, 所以原程序 for 循環的初始條件和步長不對,下面是修改後的代碼:

#include "stdio.h"
int main(void)
{
int count, fen1, fen2, fen5, money;
int repeat, ri;

scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &money);
count=0;
for (fen5 = money /5; fen5 >= 1; fen5--){
for (fen2 = money /2; fen2 >= 1; fen2--){
for (fen1 = money; fen1 >= 1; fen1--){
if(fen1+2*fen2+5*fen5==money){
printf("fen5:%d,fen2:%d,fen1:%d,total:%d\n",fen5, fen2, fen1, fen5+fen2+fen1);
count++;}
}}}
printf("count = %d\n", count);
}
}

⑸ 換零錢問題。將一元錢換成1分,2分,或5分的零錢有多少換法。vb編程

題目我沒怎麼看懂,比如說你寫的i+j+l==k,那題目中的40放在哪裡?
另外我要說的一個大問題,也是就是float的用法,float的值是小數,電腦的演算法是近似值。
舉個例子,
float
a
=
1;
b
=
a/10;
按道理b此時是0.1,但是你輸出的由於編譯器的不同有可能是
0.10000000000001,也有可能是0.09999999999999.也有可能是0.1。當出現這種情況,你的if中的判斷就永遠不會實現。
所以你的if可以比較大小判斷,比如if(x==5)寫成((x>4.9999)&&(x<5.00001))或者不要出現float,所有的數值乘以10,把小數去除。

⑹ 小花有一個一塊錢硬幣,要換零錢,最小值為一角錢,有幾種換法

1、10個一角
2、兩個5角
3、一個5角,5個1角

⑺ 深圳招商銀行存零錢硬幣怎麼收費

深圳招商銀行存零錢硬幣收費標準是每50枚收取1塊錢清點費。根據查詢相關信息顯示,招商銀行的收費標准把硬幣和紙幣區分開來,硬幣每50枚收取1塊錢清點費,紙幣每1000張收取10元清點費。招商銀行,1987年成立於深圳蛇口,是中國境內第一家完全由企業法人持股的股份制商業銀行,也是國家從體制外推動銀行業改革的第一家試點銀行。

⑻ 換零錢.把一元錢全兌換成硬幣,有多少種兌換方法

硬幣分為1分 5分 1角 5角 以1分算起 1元就是 100個1分 20個5分 10個1角 2個5角
然後就是四層循環的窮舉法了

⑼ 用1分,2分和5分硬幣湊成一元錢的方法有多少種

不知道有沒有限制一定要有這3種硬幣呢?如果這三種硬幣必須至少用一枚的話,演算法如下:
設x個1分,y個2分,z個5分,且xyz都是正自然數
x+2y+5z=100
19>=z>=1
z=1時 x+2y=95 x>=1,且x是奇數;2y<=94,且y是整數,所以有47種
z=2時 x+2y=90 1<=y<=44 同理,有44種
z=3時 x+2y=85 1<=y<=42 同理,有42種
z=4時 x+2y=80 1<=y<=39 同理,有39種
z=5時 x+2y=75 1<=y<=37 同理,有37種
……
這個方法好笨,要算19次……不過我暫時想不出更好的方法
但有個規律就是個數依次-3,-2,-3,-2,-3……

⑽ C語言換零錢:把一元人民幣兌換成硬幣,共有多少種兌換方法

#include<stdio.h>
#define SUM 10//定義總的錢
#define ONE 1//定義一角
#define FIVE 5//定義五角
int main()
{
int i;
int count = 0;//初始化為0
//控制循環數量,考慮兌換不會超過SUM/FIVE,
//所以可以以此控制循環次數,加快運行速度
for(i=0;i<=SUM/FIVE;i++)
if((SUM - FIVE*i)>=0)//判斷,只要剩下的是大於等於0的硬幣數,即滿足要求
count++;
printf("共有%d種兌換方法\n",count);
return 0;
}

熱點內容
thinkphp關掉緩存 發布:2025-07-12 23:44:01 瀏覽:86
互動平台源碼 發布:2025-07-12 23:42:15 瀏覽:9
矩形密碼是什麼 發布:2025-07-12 23:41:15 瀏覽:407
kvm存儲技術包括 發布:2025-07-12 23:41:15 瀏覽:950
安卓手機網路怎麼設置才好 發布:2025-07-12 23:33:01 瀏覽:272
怎麼修改手機號服務密碼 發布:2025-07-12 23:29:37 瀏覽:158
myeclipsejsp資料庫連接 發布:2025-07-12 23:26:25 瀏覽:553
凱迪拉克ct6電磁懸掛是哪個配置 發布:2025-07-12 23:24:38 瀏覽:597
linuxnginx重啟 發布:2025-07-12 23:11:00 瀏覽:803
電腦檢查伺服器 發布:2025-07-12 23:10:59 瀏覽:606