在给出的40个整数里加得589160的有143种。
程序代码:
void shuchu(int k[],long a[],long x)
{
int i,j;
long n=0;
for(i=0;i<10;i++)
{
n+=a[k[i]];
if(n==x)break;
else if(n>x)break;
}
if(n==x)
{
for(j=0;j<=i;j++)
{
printf("%ld",a[k[j]]);
if(j!=i)printf("+");
}
}
printf("=%ld\n",n);
}
main()
{
long int n,y,x=589160,b[40],a[40]={114190,71730,70750,46650,13650,116030,113670,111160,115878,60280,
111305,11410,115684,77100,109930,59600,111620,113806,109305,100799,
107405,115290,103335,114495,116265,41430,114337,106386,40500,28335,
105150,112355,102785,109050,43058,102470,109010,111515,107547,20647};
int i,j,m,k1,k[10];
for(i=0;i<40;i++)
b[i]=a[i];
for(i=0;i<39;i++)
{
n=a[i];
k1=0;
for(j=i+1;j<40;j++)
{
if(n>a[j])
{
k1=j;
n=a[k1];
}
}
if(k1!=0)
{
n=a[i];
a[i]=a[k1];
a[k1]=n;
}
}
m=y=0;
for(i=0;i<40;i++)
{
printf("%ld ",a[i]);
if((i+1)%10==0)
printf("\n");
}
printf("\n");
for(k[0]=0;k[0]<39;k[0]++)
{
n=a[k[0]];
for(k[1]=k[0]+1;k[1]<40;k[1]++)
{
if(n+a[k[1]]>x)break;
else n+=a[k[1]];
for(k[2]=k[1]+1;k[2]<40;k[2]++)
{
if(n+a[k[2]]>x)break;
else n+=a[k[2]];
for(k[3]=k[2]+1;k[3]<40;k[3]++)
{
if(n+a[k[3]]>x)break;
else n+=a[k[3]];
for(k[4]=k[3]+1;k[4]<40;k[4]++)
{
if(n+a[k[4]]>x)break;
else n+=a[k[4]];
for(k[5]=k[4]+1;k[5]<40;k[5]++)
{
if(n+a[k[5]]>x)break;
else n+=a[k[5]];
for(k[6]=k[5]+1;k[6]<40;k[6]++)
{
if(n+a[k[6]]>x)break;
else n+=a[k[6]];
for(k[7]=k[6]+1;k[7]<40;k[7]++)
{
if(n+a[k[7]]>x)break;
else n+=a[k[7]];
for(k[8]=k[7]+1;k[8]<40;k[8]++)
{
if(n+a[k[8]]>x)break;
else n+=a[k[8]];
for(k[9]=k[8]+1;k[9]<40;k[9]++)
{
n+=a[k[9]];
if(n==x)
{
y++;
m=1;
shuchu(k,a,x);
n-=a[k[9]];
break;
}
else n-=a[k[9]];
}
if(n==x&&m==0)
{
y++;
m=1;
shuchu(k,a,x);
n-=a[k[8]];
break;
}
else {m=0;n-=a[k[8]];}
}
if(n==x&&m==0)
{
y++;
m=1;
shuchu(k,a,x);
n-=a[k[7]];
break;
}
else {m=0;n-=a[k[7]];}
}
if(n==x&&m==0)
{
y++;
m=1;
shuchu(k,a,x);
n-=a[k[6]];
break;
}
else {m=0;n-=a[k[6]];}
}
if(n==x&&m==0)
{
y++;
m=1;
shuchu(k,a,x);
n-=a[k[5]];
break;
}
else {m=0;n-=a[k[5]];}
}
if(n==x&&m==0)
{
y++;
m=1;
shuchu(k,a,x);
n-=a[k[4]];
break;
}
else {m=0;n-=a[k[4]];}
}
if(n==x&&m==0)
{
y++;
m=1;
shuchu(k,a,x);
n-=a[k[3]];
break;
}
else {m=0;n-=a[k[3]];}
}
if(n==x&&m==0)
{
y++;
m=1;
shuchu(k,a,x);
n-=a[k[2]];
break;
}
else {m=0;n-=a[k[2]];}
}
if(n==x&&m==0)
{
y++;
m=1;
shuchu(k,a,x);
n-=a[k[1]];
break;
}
else {m=0;break;}
}
m=0;
}
printf("\ny=%ld\n\n",y);
for(i=0;i<40;i++)
printf("%8ld",a[i]);
printf("\n\n");
}