帮个忙,修改下面c程序
要求输入任意一组数,任取几个,写出它们全部排列
如1 5 6选2个为1 5 ,1 6,5 6
void comb(int *p,int k)
{int n,i;
int b[30];
int *q;
if(k>1)
{for(n=0;*(p+n);n++)
{ b[k]=*(p+n);
*(p+n)=*p;
*p=b[k];
comb(p+1,k-1);
q=p;
}
}
else
{for(i=0;*(q+i);i++)
printf("%d",b);
printf("\n");
}
}
void main()
{int m,j,t;
int a[30];
printf("qing shu ru zhong ge shu:");
scanf("%d",&m);
printf("qing shu ru shu zi:");
for(j=0;j<m;j++)
scanf("%d",a[j]);
printf("qing shu ru xuan ji:");
scanf("%d",&t);
comb(a[0],t);
printf("\n");
}
----------------解决方案--------------------------------------------------------
根据调整原则
你到电脑爱好者俱乐部看看
我以前有写过这个方面的东西
我记得当时的哪个帖子好象和栈有关
----------------解决方案--------------------------------------------------------
怎么那么久了,这里没有人帮我修改呢?
顺便谢谢cherrysindow的建议
----------------解决方案--------------------------------------------------------
那是因为你沉下去了,看不到
----------------解决方案--------------------------------------------------------
把算法写了出来
你要是想改变N只要把标有here的地方的4换一个数字就可以
其他的地方不用改
/*write by cherry*/
class Test{
public static void main(String[] args){
int i=0,j=0,k=0;
int[] a=new int[4];//here
for(i=0;i<a.length;i++)
a[i]=i+1;
while(true)
{
for(i=0;i<a.length-1;i++)
{
for(j=i+1;j<a.length;j++)
if(a[j]<a[i])break;
if((j<a.length)&&(a[j]==a[i]-1))continue;
if(i==a.length-2)
{
for(int m=0;m<a.length;m++)
System.out.print(a[m]+",");
System.out.println("\n");
}
}
for(j=a.length-1;j>0;j--)
if(a[j]>a[j-1])break;
if(j==0)break;
for(i=a.length-1;i>=j;i--)
if(a[i]>a[j-1])break;
int t=a[j-1]; a[j-1]=a[i];a[i]=t;
for(i=a.length-1;i>j;i--,j++)
{
t=a[j];a[j]=a[i];a[i]=t;
}
}
}
} /*write by cherry*/
时间紧,我只是测试了一下,应该没有问题了
要是有什么不对
和我联系
----------------解决方案--------------------------------------------------------
谢谢cherrysindow的帮忙
----------------解决方案--------------------------------------------------------