/********************************
题目大意:不可以用num1个1,num2个2,num3个5组合得到的最小数;
题目解析:求(1+x+.....+x^num1)(1+x^2+....+x^(2*num2))(1+x^5+....X^(5*num3))
的系数为零的指数;若系数都不为零,则最小数为sum+1;
错误分析:1.不能确定j的循环次数;
2.没有把M数值开到最大,导致ACCESS_VIOLATION (由于指针、数组下标越界造成的)
**************************************/
#include<stdio.h>
#include<iostream>
#include<algorithm>
#define M 10000
using namespace std;
int a1[M],a2[M] ,eum[3]={1,2,5};
int main()
{
int i,j,k,num1,num2,num3,s,c;
while(scanf("%d %d %d",&num1,&num2,&num3),num1||num2||num3)
{
s=num1+num2*2+num3*5;
for(i=0;i<=num1;i++)//先为(1+x+.....+x^num1)的系数赋值
{
a1[i]=1;
a2[i]=0;
}
c=num1;
for(i=2;i<=3;++i)//控制前i-1个表达式与第i个表达式的乘积,总共有3的表达式
{
for(j=0;j<=c;++j)//控制表达i的项数;
for(k=0;k+j<=s;k+=eum[i-1])//指数k最大不能超过1,2,5组合总数
{
a2[j+k]+=a1[j];
}
for(j=0;j<=s;++j)
{
a1[j]=a2[j];
a2[j]=0;
}
c=num1+2*num2;//j的大小不能大于1,2的组合总数
}
for(i=0;i<=s;i++)
{
if(a1[i]==0)
{
printf("%d\n",i);
break;
}
}
if(i==s+1)printf("%d\n",i);
}
return 0;
}
杭电acm1085.Holding Bin-Laden Captive!(母函数)
最新推荐文章于 2018-08-06 17:27:47 发布