组合人民币问题(存在问题)

版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/88013877

代码太长,感觉可以使用递归解决,但是目前没有想出合适的解决方案,大神们有好的思路可以留言

把张数最少的那一种显示出来,现在也没有很好的思路

问题

有面值为 100 50 20 10 5 1 的几种人民币,输入金额,罗列
出所有的组合方案,并且统计出用的张数最少的那一种,并且显示

代码

#include <stdio.h>
int main() {
	int i_1,i_2,i_3,i_4,i_5,i_6;
	int sum,sum_1,sum_2,sum_3,sum_4,sum_5,sum_6;
	int num;
	sum=0;
	printf("请输入面值金额:");
	scanf("%d",&num);
	if(num) {
		i_1 = 0;	//表示100的张数
		sum_1 = sum;
		while(sum+i_1*100<num) {
			if(sum_1<num) {
				i_2 = 0;	//表示50的张数
				sum_2 = sum_1;
				while(sum_1 + i_2*50<num) {
					if(sum_2<num) {
						i_3 = 0;	//表示20的张数
						sum_3 = sum_2;
						while(sum_2 + i_3*20<num) {
							if(sum_3<num) {
								i_4 = 0;	//表示10的张数
								sum_4 = sum_3;
								while(sum_3 + i_4*10<num) {
									if(sum_4<num) {
										i_5 = 0;	//表示5的张数
										sum_5 = sum_4;
										while(sum_4 + i_5*5<num) {
											if(sum_5<num) {
												i_6 = 0;	//表示1的张数
												sum_6 = sum_5;
												while(sum_5 + i_6*1<num) {
													i_6++;
													sum_6 = sum_6 + 1;
													if(sum_6==num)	printf("需要%d张100,需要%d张50,需要%d张20,需要%d张10,需要%d张5,需要%d张1\n",i_1,i_2,i_3,i_4,i_5,i_6);
												}
											}
											i_5++;
											sum_5 = sum_5 + 5;
											if(sum_5==num)	printf("需要%d张100,需要%d张50,需要%d张20,需要%d张10,需要%d张5\n",i_1,i_2,i_3,i_4,i_5);
										}
									}
									i_4++;
									sum_4 = sum_4 + 10;
									if(sum_4==num)	printf("需要%d张100,需要%d张50,需要%d张20,需要%d张10\n",i_1,i_2,i_3,i_4);
								}
							}
							i_3++;
							sum_3 = sum_3 + 20;
							if(sum_3==num)	printf("需要%d张100,需要%d张50,需要%d张20\n",i_1,i_2,i_3);
						}
					}
					i_2++;
					sum_2 = sum_2 + 50;
					if(sum_2==num)	printf("需要%d张100,需要%d张50\n",i_1,i_2);
				}
			}
			i_1++;
			sum_1 = sum_1 + 100;
			if(sum_1==num)	printf("需要%d张100\n",i_1);
		}
	}
	
	return 0;
}



猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/88013877