真是奇怪的问题...

darkfirexl 2004-01-29 07:03:12
打印出n个数的所有排列组合,n由main()输入
以下程序有什么错?
int N,i;
void pailie(int *p,n){
int*q,a;
if(n==1){
for(q=p;q<p+N;q++){ printf("%d ",*q);}
printf("\n");
}
else{
for(i=n;i>0;i--){
a=*(p+i-1);*(p+i-1)=*(p+n-1);*(p+n-1)=a;
pailie(p,n-1);
for(q=p;q<p+N;q++){ printf( "%d ",*q);}
printf("\n");
}
}
}
main(){
int num[10],*l,k
scanf("%d",&N);
k=N;
for(l=num;l<num+N;l++){scanf("%d",l);}
pailie(num,k);
}
...全文
23 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
darkfirexl 2004-01-30
  • 打赏
  • 举报
回复
我拷兄弟,pailie函数我就用了一个指针唉...运行不出来当然是哪里有错咯!
kbsoft 2004-01-30
  • 打赏
  • 举报
回复
int N;
void pailie(int *p,int n){
int*q,a,i;
if(n==1){
for(q=p;q<p+N;q++){ printf("%d ",*q);}
printf("\n");
}
else{
for(i=n;i>0;i--){
a=*(p+i-1);*(p+i-1)=*(p+n-1);*(p+n-1)=a;
pailie(p,n-1);
//递归返回必须恢复状态的说!
a=*(p+i-1);*(p+i-1)=*(p+n-1);*(p+n-1)=a;
}
}
}
main(){
int num[10],*l;
scanf("%d",&N);
for(l=num;l<num+N;l++){scanf("%d",l);}
pailie(num,N);
system("PAUSE");
}

//BTW,你的指针学的不错嘛,嘿嘿
kbsoft 2004-01-30
  • 打赏
  • 举报
回复
呵呵,怪不得呢,暗恋大你3.5岁的MM啊
kbsoft 2004-01-30
  • 打赏
  • 举报
回复
//我ft,原来你的变量i定义成了全局啊,这次AC了
int N;
void pailie(int *p,int n){
int*q,a,i;
if(n==1){
for(q=p;q<p+N;q++){ printf("%d ",*q);}
printf("\n");
}
else{
for(i=n;i>0;i--){
a=*(p+i-1);*(p+i-1)=*(p+n-1);*(p+n-1)=a;
pailie(p,n-1);
}
}
}
main(){
int num[10],*l;
scanf("%d",&N);
for(l=num;l<num+N;l++){scanf("%d",l);}
pailie(num,N);
system("PAUSE");
}


darkfirexl 2004-01-30
  • 打赏
  • 举报
回复
没必要吧
darkfirexl 2004-01-30
  • 打赏
  • 举报
回复
有必要么?
kbsoft 2004-01-30
  • 打赏
  • 举报
回复
每次递归返回之后,还要恢复原来的状态,所以还要交换一次的吧
darkfirexl 2004-01-30
  • 打赏
  • 举报
回复
那是我打字打错了.调试的时候没有语法错误
kbsoft 2004-01-30
  • 打赏
  • 举报
回复
程序里好多笔误啊
int N,i;
void pailie(int *p,n){
int*q,a;
if(n==1){
for(q=p;q<p+N;q++){ printf("%d ",*q);}
printf("\n");
}
else{
for(i=n;i>0;i--){
a=*(p+i-1);*(p+i-1)=*(p+n-1);*(p+n-1)=a;
pailie(p,n-1);
for(q=p;q<p+N;q++){ printf( "%d ",*q);} //这一句什么意思,在上面不是已判断输出了吗?
printf("\n");
}
}
}
main(){
int num[10],*l,k//这里少了分号
scanf("%d",&N);
k=N;
for(l=num;l<num+N;l++){scanf("%d",l);}
pailie(num,k);
}

darkfirexl 2004-01-30
  • 打赏
  • 举报
回复
n定义了,我打错了.一个n是pailie里的,N是外部变量
darkfirexl 2004-01-30
  • 打赏
  • 举报
回复
对了,我早就说过吗!我的算法和他一样,没人睬我压.
我的算法是递归:每一次递归顺序将数组中的所有的数依次与最后一个数交换,然后对前面的数排列.谢拉!分是少了些,马上还可以加
WYlslrt 2004-01-30
  • 打赏
  • 举报
回复
你pailie中n==l l定义没?在main中l可是地址呀。在pailie中n可是整型变量。
WYlslrt 2004-01-30
  • 打赏
  • 举报
回复
还在线?那你的算法思想说一下。
darkfirexl 2004-01-30
  • 打赏
  • 举报
回复
我拷,这也叫多啊,可我习惯用指针呀...兄弟帮忙看看吧...
WYlslrt 2004-01-30
  • 打赏
  • 举报
回复
你和那个 一剑怒拔的算法思想一样,把算法思想说一下,我来看看代码,他那个代码我就不懂什么意思。
WYlslrt 2004-01-30
  • 打赏
  • 举报
回复
我的意思是说,指针运算多。
WYlslrt 2004-01-30
  • 打赏
  • 举报
回复
如果算法没错,你再仔细仔细分析指针,
代码我没看,估计是哪个地方写错了,你没注意到,况且你又用了那么多的指针。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧