一个零钱拆分问题,即使规定为正数范围,其中一个数却还总是为负数
原题:将一笔零钱(大于8分,小于100分)换成5分,2分,1分的硬币,每种硬币至少一枚。输入金额,问有几种换法?针对每种换法,输出各面额数量和总数量。
程序代码:
#include<stdio.h> int main() { int n,one, two, five,i=0; printf("Enter n(8<=n<=100):"); scanf("%d", &n); while(n<8 || n>100) { printf("Enter n(8<=n<=100):"); scanf("%d", &n); } for (five = 1; five <= n / 5; five++) { for (two = 1; two <= n / 2; two++) { for (one = 1;;one++) { if (n == 5 * five + 2 * two + one&&one>0) { i++; printf("\n第%3d种 五分%2d个 两分%2d个 一分%2d个 共%2d个",i,five,two,one,five+two+one); break; } } } } printf("共%d种方法", i); getchar(); getchar(); return 0; }
可以看到第13-15出现了负数。