我是靠谱客的博主 内向小猫咪,最近开发中收集的这篇文章主要介绍【计算机算法】枚举——换硬币,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

输入格式

输入在一行中给出待换的零钱数额x∈(8,100)。

输出格式

要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量,
fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。

输入样例

13

输出样例

fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4



代码如下:
#include<iostream>
using namespace std;
int main(){
	int x;//多少分钱 
	cin>>x; 
	int count=0; //共多少种换法
	int ff,tf,of;//代表五分,两分,一分 
	int array[1000][4];
	int i = 0;
	for(int ff = 1;ff <= x/5;ff++){
		for(int tf = 1; tf <= (x - ff*5)/2 ;tf++){
			of = x - ff*5 - tf*2;
			if(of >= 1){
				array[i][0] = ff;
				array[i][1] = tf;
				array[i][2] = of;
				array[i][3] = ff+tf+of;
				count++;
				i++;
			}
		}
	}
	for(i = count-1;i >= 0;i--)
		cout<<"fen5:"<<array[i][0]<<", fen2:"<<array[i][1]<<", fen1:"<<array[i][2]<<", total:"<<array[i][3]<<endl;
	cout<<"count = "<<count<<endl;
}

需要注意的是,for循环中判断条件是<=,包括“=”,以及注意题目中提及了倒序输出,所以我选择用数组存储后倒序输出。当然也可以让for循环中ff从x/5开始,不断自减直到1为止(每一个最少需要一枚),这样相较来说比较省空间。

最后

以上就是内向小猫咪为你收集整理的【计算机算法】枚举——换硬币的全部内容,希望文章能够帮你解决【计算机算法】枚举——换硬币所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部