您好,登錄后才能下訂單哦!
人的理想志向往往和他的能力成正比。
--約翰遜
AI 啟蒙-無人售貨機智能找零算法
原創:Martin 老師 公眾號:零基礎零障礙學習C語言
【問題區】
你現在是一家無人售貨機生產公司的高級程序員,技術經理叫你實現無人售貨機智能找零錢的算法,具體需求如下:
當購物者購物后,插入一張滿足支付的人民幣,售貨機可以自動計算出找零的方案,并控制找零模塊出鈔,現在需要你實現找零算法找出所有的找零方案,供出鈔模塊選擇~
假設某一時刻零錢有 50元一張,20元2張,10元2張,5元1張,1元8張,某用戶隨機購買商品(商品價格在1-99元之間)后,他投入一張面值大于所購商品價格的人民幣(可選:5元, 10元, 20元, 50元, 100元),請列出所有找零方案!
【提示區】
此問題主要是要找出待找零的人民幣任意相加剛好等于要找的零錢的所有組合,如,顧客購買的商品是3塊,投入10塊,那么可選的找零方案有:
1張5元 + 2張 1元
7張1元
【C代碼實現區】
#include <stdio.h>
/***********************************
*輸出當前找零方案對應的所有零錢的幣值
************************************/
void print_solution(int changes[], int size, int solution){
int bit = 1;
int i = 0;
printf("已經為您找到一種解決方案:\n");
for(i=0; i<size; i++){
if((bit& solution)==bit){
printf(" %d ", changes[i]);
}
bit <<=1;
}
printf("\n");
}
int main(void){
//定義可用于找零的零錢池
int changes[]={1,2,2,5,10,20,50};
int total = 1;
int need = 0;
int num =sizeof(changes)/sizeof(int);
printf("請輸入您要找的零錢數目:\n");
scanf("%d", &need);
//計算候選方案的數量
for(int i=0; i<num; i++){
total*=2;
}
//遍歷所有的解決方案
for(int j=0; j<total; j++){
int res = 0;
int bit = 1;
for(int k=0; k<num; k++){
if((bit&j) == bit){
res+=changes[k];
}
bit<<=1;//0x01 => 0x10
}
if(res == need){
print_solution(changes, num, j);
}
}
return 0;
}
【視頻講解】
詳細講解視頻分享在騰訊視頻,鏈接:https://v.qq.com/x/page/r08186cmodc.html
-----------------------------------------------------------------------------------------
更多C語言學習視頻內容也可以關注我公眾號: 零基礎零障礙學習C語言
學習路線和建議
編程英語加油站
編程思維修煉
編程技術文章
IT職場提升
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。