有29个苹果,请将它们分成5堆,通过5堆可以组成1到29中的任意数,例如若有一堆个数为1,有一堆个数为4,则这两堆苹果可组成1,4;5三个数。
//用a,b,c,d,e分别表示第1堆到第5堆的个数。
//显然一定有一堆苹果为1
//显然一琮有一堆苹果为2
//本题属加法问题,故可设a<b<c<d<e
#include<iostream.h>
void main(){
int a,b,c,d,e,aa,bb,cc,dd,ee,s,k,r[30];
a=1;
b=2;
for(c=3;c<=27;c++)
for(d=c+1;d<=28;d++)
{
e=29-a-b-c-d;
if(e>d){
for(aa=0;aa<=a;aa+=a)
for(bb=0;bb<=b;bb+=b)
for(cc=0;cc<=c;cc+=c)
for(dd=0;dd<=d;dd+=d)
for(ee=0;ee<=e;ee+=e)
{
s=aa+bb+cc+dd+ee;
r[s]=s;
}
k=1;
for(int i=1;i<=29;i++)
if(r[i]!=i)
k=0;
if(k==1)
cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<endl;
for(i=1;i<=29;i++)
r[i]=0;
}
}
}