CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

求高手解释一下算法,关于非递归全排列,小弟没参透!!!!!

楼主aboy85()2006-05-03 08:46:01 在 C/C++ / 新手乐园 提问

#include<stdio.h>  
   
  void   main()  
  {  
  int   i,j,k,x,temp,n,a[10]={0};  
  scanf("%d",&n);  
  for(i=1;i<=n;i++)  
  {  
  a[i]=i;  
  }  
  /*for(i=1;i<=n;i++)  
  {  
  printf("%d",a[i]);  
  }*/  
  do{  
  for(i=1;i<=n;i++)  
  {  
  printf("%d",a[i]);  
  }  
  printf("\n");  
  x=0;  
  for(i=1;i<=n-1;i++)  
  {  
  if(a[i]<=a[i+1])/////找到最后的顺序  
  x=i;  
  }  
  if(x!=0)  
  {  
  for(i=x;i<=n;i++)  
  {  
  if(a[x]<=a[i])  
  j=i;  
  }  
  //swap(a[x],a[j]);  
  temp=a[x];  
  a[x]=a[j];  
  a[j]=temp;  
  for(i=x+1;i<=n;i++)  
  {  
  if(i!=n+x+1-i)  
  {  
  temp=a[i];  
  a[i]=a[n+x+1-i];  
  a[n+x+1-i]=temp;  
  }  
  //swap(a[i],a[n+x+1-i]);  
  if((i+1)*2>n+x+1)  
  break;  
  }  
  }  
  }while(x!=0);  
  }  
   
  编译能通过,我试了  
  语句能看懂,就是算法不明白 问题点数:10、回复次数:3Top

1 楼aboy85()回复于 2006-05-03 13:54:15 得分 0

我先顶一下就是这里不太明白  
  for(i=x+1;i<=n;i++)  
  {  
  if(i!=n+x+1-i)  
  {  
  temp=a[i];  
  a[i]=a[n+x+1-i];  
  a[n+x+1-i]=temp;  
  }  
  //swap(a[i],a[n+x+1-i]);  
  if((i+1)*2>n+x+1)  
  break;  
  }  
   
  a[n+x+1-i]咋想的呢?  
  Top

2 楼sz20006km()回复于 2006-05-03 16:21:35 得分 0

这就是交换     把两个数组存储的内容进行交换Top

3 楼sz20006km()回复于 2006-05-03 16:24:33 得分 0

跟上帖     你自己写个      
  int   a   =   10   ,b   =   20,   temp   =   0;  
  temp   =   a;  
  a=   b;  
  b   =   temp;  
   
  看下就好了  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:aboy85

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo