第1个回答 2013-08-21
//ok 了,关键思想,先取最原始的5个数,最右边的一个加1,加到不到加的时候,再进次右边一个加1,然后后面的数依次变成前一个加1,即有1 2 3 4 5-->1 2 3 4 6
1 2 3 4 10-->1 2 3 5 6,实现代码:
#include<stdio.h>
int a[5];
int visit[11];
main()
{
int i,j,t;
for(i=0;i<11;i++) visit[i]=0;
for(i=0;i<5;i++) {a[i]=i+1;visit[i+1]=1;}
do
{
t=0;
for(i=0;i<5;i++) printf("%d ",a[i]);printf("\n");
for(i=4;i>=0;i--)
{
for(j=1;;j++)
{
if(a[i]+j>10) break;
if(visit[a[i]+j]==0)
{
visit[a[i]]=0;
a[i]=a[i]+j;
visit[a[i]]=1;
t=1;break;
}
}
if(t==1)
{
for(j=i+1;j<5;j++)
{
visit[a[j]]=0;
a[j]=a[j-1]+1;
visit[a[j]]=1;
}
break;
}
}
}while(t==1);
}