其实是一个朋友的作业啦。
我因为这几天事情实在太多,木有时间去写就拿出来给有时间的朋友,有兴趣的朋友做做,其实很简单的排列组合问题:输入四个数字,比如(0,2,3,5),然后再输入一个长度(比如5),然后输出所有5位长的刚才那四个数字的组合,。比如 00235,02335等等
150分,先到先得。,
我因为这几天事情实在太多,木有时间去写就拿出来给有时间的朋友,有兴趣的朋友做做,其实很简单的排列组合问题:输入四个数字,比如(0,2,3,5),然后再输入一个长度(比如5),然后输出所有5位长的刚才那四个数字的组合,。比如 00235,02335等等
150分,先到先得。,
不要按顺序,要把所有的组合都输出。比如 52032、35202, 22305等等
for(int i1=0;i1<4;i1++)
for(int i2=0;i2<4;i2++)
for(int i3=0;i3<4;i3++)
for(int i4=0;i4<4;i4++)
for(int i5=0;i5<4;i5++)
{
printf("%d%d%d%d%d\n",a[i1],a[i2],a[i3],a[i4],a[i5]);
}
for(int i1=0;i1<4;i1++)
for(int i2=0;i2<4;i2++)
for(int i3=0;i3<4;i3++)
for(int i4=0;i4<4;i4++)
for(int i5=0;i5<4;i5++)
{
printf("%d%d%d%d%d\n",a[i1],a[i2],a[i3],a[i4],a[i5]);
}
void foo(const vector<int>& vec, size_t n)
{
if (n == 0)
{
cout << endl;
return;
}
for (vector<int>::const_iterator cIter = vec.begin(); cIter != vec.end(); ++cIter)
{
cout << *cIter;
foo(vec, n - 1);
}
}
# define LENGTH 3
# define VARIABLES 6
int A,B,C,D,E,F;
int *pt[]={&A,&B,&C,&D,&E,&F};
int *side[SIDE_N][LENGTH]={&A,&B,&C,&C,&D,&E,&E,&F,&A};
int side_total[SIDE_N];
main{}
{ int i,j,t,equal;
for (j=0;j<VARIABLES;j++)
*pt[j]=j+1;
while(1)
{ for (i=0;i<SIDE_N;i++)
{ for (t=j=0;j<LENGTH;j++)
t+=*side[i][j];
side_total[i]=t;
}
for (equal=1,i=0;equal&&i<SIDE_N-1;i++)
if (side_total[i]!=side_total[i+1] equal=0;
if (equal)
{ for (i=1;i<VARIABLES;i++)
printf(“%4d”,*pt[i]);
printf(“\n”);
scanf(“%*c”);
}
for (j=VARIABLES-1;j>0;j--)
if (*pt[j]>*pt[j-1]) break;
if (j==0) break;
for (i=VARIABLES-1;i>=j;i--)
if (*pt[i]>*pt[i-1]) break;
t=*pt[j-1];* pt[j-1] =* pt[i]; *pt[i]=t;
for (i=VARIABLES-1;i>j;i--,j++)
{ t=*pt[j]; *pt[j] =* pt[i]; *pt[i]=t; }
}
}
for(int i1=0;i1<4;i1++)
for(int i2=0;i2<4;i2++)
for(int i3=0;i3<4;i3++)
for(int i4=0;i4<4;i4++)
for(int i5=0;i5<4;i5++)
{
printf("%d%d%d%d%d\n",a[i1],a[i2],a[i3],a[i4],a[i5]);
}
这种方法不错
#define MAXLEN 1024
int num[MAXLEN];
int numlen;void line(int a1,int a2,int a3,int a4,int len)
{
if(len==0)
{
for(int i=0;i<numlen;i++)
{
printf("%1d",num[i]);
}
printf("\n");
}
else
{
num[numlen-len]=a1;
line(a1,a2,a3,a4,len-1);
num[numlen-len]=a2;
line(a1,a2,a3,a4,len-1);
num[numlen-len]=a3;
line(a1,a2,a3,a4,len-1);
num[numlen-len]=a4;
line(a1,a2,a3,a4,len-1);
}
}int main(int argc, char* argv[])
{
int a1,a2,a3,a4,len;
printf("please input 4 number and length:\n");
scanf("%1d %1d %1d %1d %d",&a1,&a2,&a3,&a4,&len);
a1=a1%10;
if(a1==a2||a1==a3||a1==a4||a2==a3||a2==a4||a3==a4||len<0||len>MAXLEN)
{
printf("error!");
return 0;
}
numlen=len;
line(a1,a2,a3,a4,len);
return 0;
}