最少找零






int moneySort[] = {25,10,5,1};
int g_num25;
int g_num10;
int g_num5;
int g_num1;

int g_moneyLeft = 0;
int g_currMoney = 0;

void searchLoop(int totalCheck, int money, int &num)
{
	while (1)//找零需要的最大数量
	{
		if (g_currMoney < totalCheck)
		{
			g_currMoney += money;
			num++;
		}
		else if (g_currMoney==totalCheck) return;
		else {
			g_currMoney -= money;
			num--;
			g_moneyLeft = totalCheck - g_currMoney;
			break;
		}
	}
	return;
}
/* 贪婪算法实现最少硬币找零问题 */
void greedMethod(int totalCheck)
{
	searchLoop(totalCheck,moneySort[0],g_num25);//25美分
	searchLoop(totalCheck,moneySort[1],g_num10);//10
	searchLoop(totalCheck,moneySort[2],g_num5);//5
	searchLoop(totalCheck,moneySort[3],g_num1);// 1

}






import tkinter as tk from tkinter import messagebox def min_bills(amount): # 纸币面值及对应的名称 bills = [1000, 500, 200, 100, 50, 20, 10] # 单位:角 bill_names = ["10元","5 元", "2 元", "1 元", "5 角", "2 角", "1 角"] result = [] for i, bill in enumerate(bills): # 计算当前最大纸币的使用数量 count = int(amount // bill) # 计算剩余金额 amount -= count * bill result.append((bill_names[i], count)) if amount == 0: break if amount == 0: return result else: return None def calculate_change(): try: # 获取输入的金额 total_amount = float(entry_total.get()) * 100 # 转换为角 paid_amount = float(entry_paid.get()) * 100 # 转换为角 # 计算找零金额 change_amount = paid_amount - total_amount if change_amount < 0: messagebox.showerror("错误", "支付金额不足!") return # 计算最少找零方案 change_result = min_bills(change_amount) if change_result: result_text = "找零方案:\n" for bill, count in change_result: if count > 0: result_text += f"{bill}: {count} 张\n" messagebox.showinfo("找零结果", result_text) else: messagebox.showerror("错误", "无法用给定的纸币找零!") except ValueError: messagebox.showerror("错误", "请输入有效的金额!") # 创建主窗口 root = tk.Tk() root.title("超市现金收支找零系统") root.geometry("300x250") # 创建标签和输入框 label_total = tk.Label(root, text="商品总价(元):") label_total.pack() entry_total = tk.Entry(root) entry_total.pack() label_paid = tk.Label(root, text="支付金额(元):") label_paid.pack() entry_paid = tk.Entry(root) entry_paid.pack() # 创建计算按钮 button_calculate = tk.Button(root, text="计算找零", command=calculate_change) button_calculate.pack() # 运行主循环 root.mainloop()再添加一个金额不足应给多少的部分
最新发布
11-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值