邮票面值问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include"string.h"
#include"stdlib.h"
int MaxValue(int p1, int p2, int p3, int p4);
int main()
{
int p1=1,p2,p3,p4;//p1表示第一种面值邮票
int x,x0=0,x1,x2,x3,x4;//x0表示最大面值邮票
for(p2=p1+1;p2<=3*p1+1;p2++)
{
for(p3=p2+1;p3<=3*p2+1;p3++)
{
for(p4=p3+1;p4<=3*p3+1;p4++)
{
x = MaxValue(p1,p2,p3,p4);
if(x>x0)
{
x0=x;x1=p1;x2=p2;x3=p3;x4=p4;
printf("%5d%5d%5d%5d\t",x1,x2,x3,x4);
printf("x0=%d\n",x0);
}
}
}
}
return 0;
}
int MaxValue(int p1, int p2, int p3, int p4)
{
int t1, t2, t3, t4;
int len = 3*p4 + 1;
int sum;
int i;
int *a = (int *)malloc(sizeof(int)*len);//数组用来存储各种可能存在的票额,根据邮票票额的最大值为数组动态分配空间
memset(a, 0, sizeof(int)*len);//设定初值为0
for (t1 = 0; t1 < 4; t1++)//枚举每种邮票的数量
{
for (t2 = 0; t2 < 4; t2++)
{
for (t3 = 0; t3 < 4; t3++)
{
for (t4 = 0; t4 < 4; t4++)
{
if (t1+t2+t3+t4 <= 3)
{
sum = t1*p1+t2*p2+t3*p3+t4*p4;
a[sum]=1;//存储可能的票额
}
}
}
}
}
for (i=0; i
if (a[i] == 0)//若某种票额未出现,则其前面的票额值为所求值
return i - 1;
}
return i - 1;
}