当前位置: 代码迷 >> C语言 >> 想到头疼都解决不了的问题,帮个忙
  详细解决方案

想到头疼都解决不了的问题,帮个忙

热度:207   发布时间:2005-12-01 11:48:00.0
想到头疼都解决不了的问题,帮个忙

帮个忙,修改下面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的帮忙

----------------解决方案--------------------------------------------------------