这个代码是参考了你的代码写的,你的代码在HDOJ 是WA的,下面有点小小的不同,通过n次得测试,发现了,但不知是什么原因。
#include<iostream>
using namespace std;
int main(){
int num_1,num_2,num_5,num,i,j,k;
int c[8005],temp[8005];
while(scanf("%d%d%d",&num_1,&num_2,&num_5)!=EOF&&(num_1||num_2||num_5) ){
num=num_1*1+num_2*2+num_5*5;
for( i=0;i<=num;i++){ //初始化
c[i]=0;
temp[i]=0;
}
//第一个表达式和第二个表达式相乘
for( i=0;i<=num_1;i++) //用第一个表达式表(即面值为1的硬币)表达所有的面值都只有一种情况
c[i]=1;
for( j=0;j<=num_1*1;j++)
for( k=0;k<=num_2*2;k+=2)
temp[j+k]+=c[j];
for( j=0;j<=num_1*1+num_2*2;j++){//扩大面值范围
c[j]=temp[j];
temp[j]=0;
}
//第二个表达式和第三个表达式相乘
for( j=0;j<=num_1*1+num_2*2;j++)
for( k=0;k<=num_5*5;k+=5)
temp[j+k]+=c[j];
for( j=0;j<=num;j++){ //扩充范围
c[j]=temp[j];
temp[j]=0;
}
for( i=0;i<=num;i++) //查找第一个为0的数
if(c[i]==0){
break;
}
printf("%d\n",i); //不知道是什么原因,这个放在if(c[i]==0) 里面是WA的 ,估计是HDOJ的系统问题
}
return 0;
}
回复 更多评论