C语言邮票组合问题,如图,那个例子在写的程序没法得出正确答案,如何修改?

2025-05-21 05:46:15
推荐回答(1个)
回答(1):

#include
int main()
{
int a[4],n;
int i,count,temp;
for(i=0;i<4;i++)
scanf("%d",&a[i]);

n=6;//第一个数规定是1,所以1-5肯定存在,所以n从6开始
while(1)
{
temp=n;//临时变量存储,防止改变temp时影响到n
count=0;//计数有几张邮票
i=3;//数组长度4,从下标3开始,也是最大的值开始

while(temp>0)
{
while(a[i]>temp)//使a[i]变成小于或等于temp的值,这样才可以拆成小邮票
i--;
count+=temp/a[i];//加上几张a[i]面值的邮票
temp%=a[i];//除去上面使用的邮票剩下的面值
}
if(count>5)//如果使用的邮票超过5张,则错误,即这时的n不符合
break;
n++;
}
printf("[1,%d]\n",n-1);// 不符合的前一个是符合的
return 0;
}