在c语言中实现全排列,对于刚接触c语言,还没学习算法的人来说,比较困难了吧。估计大佬也不会看这种基础的东西,全排列实现的办法很多,在c++中有一个专门的函数可以使用,但是在c中实现就有点困难了。如果你想出用一个循环使一个数字每一位都不相同,那么你就走进了死胡同,这种办法运算量巨大,往往到了高位就会超时。所以就要使用算法(非递归类型)。

算法采用的是交换

递归其实也是一种交换

#include<stdio.h>
#include<windows.h>
int main()
{
int a[9],n,y=1,i,j,all,p=1,t,hi,ki,m,x;
int xiao_biao,temp,zhong;
printf("请输入位数最高9位\n");
scanf("%d",&n); for( i=0;i<n;i++){
a[i]=i+1;
printf("%d",a[i]);
}
printf("\n");
for(i=1;i<=n;i++){
p*=i;
}
all=1;
while(all<p){
for(i=n-1;i>0;i--){
if(a[i]>a[i-1]){xiao_biao=i-1;break;}
}
temp=a[xiao_biao];
for(t=xiao_biao+1;t<n;t++){
for(i=t;i<n;i++){
hi=a[t]-temp;
ki=a[i]-temp;
if(hi<=ki&&hi>0){
a[xiao_biao]=a[t];y=t;
}
}
}
a[y]=temp;
m=((n-1)-(xiao_biao))/2;
j=xiao_biao+1;
if((n-1)-(xiao_biao)==2){temp=a[n-1];a[n-1]=a[n-2];a[n-2]=temp;}
else if((n-1)-(xiao_biao)==3){temp=a[n-1];a[n-1]=a[n-3];a[n-3]=temp;}
else if((n-1)-(xiao_biao)==4||(n-1)-(xiao_biao)==5)x=2;
else if((n-1)-(xiao_biao)==6||(n-1)-(xiao_biao)==7)x=3;
else if((n-1)-(xiao_biao)==8||(n-1)-(xiao_biao)==9)x=4;
if((n-1)-(xiao_biao)==4||(n-1)-(xiao_biao)==5||(n-1)-(xiao_biao)==6||(n-1)-(xiao_biao)==7||(n-1)-(xiao_biao)==8||(n-1)-(xiao_biao)==9){
zhong=n;
for(i=0;i<x;i++){ temp=a[zhong-1];
a[zhong-1]=a[j];
a[j]=temp;
zhong--;
j++;
}
zhong=n;
} for( i=0;i<n;i++){
printf("%d",a[i]);
} printf("\n");
all++;
}
system("pause");
return 0; }

c语言的全排列的更多相关文章

  1. C语言实现全排列

    实现全排列,递归实现 #include <stdio.h> #include <stdlib.h> ; void swap(int *a, int *b) { int m; m ...

  2. C语言实现全排列和回溯法总结

    一.递归实现全排列 #include"cstdio" ]; void print_permutation(int n,int *A,int cur){ if(cur==n){ ;i ...

  3. 漫谈 Clustering (2): k-medoids

    上一次我们了解了一个最基本的 clustering 办法 k-means ,这次要说的 k-medoids 算法,其实从名字上就可以看出来,和 k-means 肯定是非常相似的.事实也确实如此,k-m ...

  4. 递归实现全排列序列C语言实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下鄙人用递归回溯的办法,采用C语言实现了全排列序列,用以某些优化方案的原始方案的给定 #incl ...

  5. C语言程序设计100例之(31):全排列问题

    例31   全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入格式 n(1≤n≤9) 输出格式 由1-n组成的所有不重复的数字 ...

  6. 递归实现1-n的全排列(JAVA语言)

    思路: For example: 123的全排列= 1在最前面 23的全排列 + 2在最前面 13的全排列 + 3最前面 12的全排列 所以只需交换和最前面元素的位置,生成剩余元素的全排列即可. im ...

  7. 枚举全排列(包括数列中有重复数)的C语言实现

    据说是用了DFS的思想--然鹅并不知道这是DFS. 主要就是选取一个数放到数组相应位置上,然后递归的排列剩下的数组,将剩下的数组递归排列完了之后再把数放回去,然后这一层递归就返回了-- 有重复数的话遇 ...

  8. 全排列问题(c语言实现)

    问题描述: 假设有数组里面存放26个字母,取出n个,以m个排列,计算排列的总数! 注意: (1) m<n (2) 里面的元素不能重复排列 (3)"遇零则止" 核心代码如下: ...

  9. C语言全排列

    #include <stdio.h> int m=5; char s[]="12345"; void Swap(char *a, char *b)//元素交换 { ch ...

随机推荐

  1. Ext.ux.UploadDialog上传大文件 HTTP 错误 413.1 - Request Entity Too Large Web 服务器拒绝为请求提供服务,因为该请求实体过大。Web 服务器无法为请求提供服务,因为它正尝试与客户证书进行协商,但请求实体过大。

    问题描述 问题:HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(I ...

  2. bay——巡检RAC操作.txt

    Oracle Cluster Software 包括下列组件:Event Management (EVM)Cluster Synchronization Services (CSS)Cluster R ...

  3. MongoDB 不在开源了,使用 Homebrew 安装只能玩社区版了

    使用了大半年的 mongodb ,最近在公司的新项目中应用,在 mac 上安装 mongodb 时发现始终安装不了,一直在报下面这样的错误: brew install mongodb 升级 brew  ...

  4. Linux CentOS 6.5 卸载、tar安装MySQL

    卸载系统自带MySQL 1. 查看系统当前是否安装有MySQL rpm -qa|grep -i mysql 2. 卸载当前版本的MySQL yum remove mysql mysql-server ...

  5. 克服悲伤情绪的三个P原则

    1.自责(Personalization) --不要自责 2.永久化(Permanence) --悲伤不会永远存在,一切都会过去 据科学研究发现:人遇到开心或悲伤的事情之后,心情在短期内会产生巨大的波 ...

  6. Acwing43 不分行从上往下打印二叉树

    地址 https://www.acwing.com/problem/content/description/41/ 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印. 样例 输入如下 ...

  7. flask之web网关、三件套、配置、路由(参数、转化器及自定义转化器)、cbv、模板语言、session

    目录 1.wsgiref.py 2.werzeug.py 3.三件套 4.配置文件 5.路由本质 6.cbv.py 7.路由转化器 8.自定义转化器 9.模板语言 10.session原理 11.te ...

  8. BoW算法及DBoW2库简介(二)

    一.BoW算法 用OpenCV实现了最简单的BoW算法进行了一次小规模的图像检索任务,使用UKbench数据库,算法原理和网上的描述差不多,使用K-means算法进行聚类,这里使用KDTree算法进行 ...

  9. wepy安装后提示Cannot read property 'addDeps'

    最近准备做一个微信小程序,以前一直用的小程序原始api做,但是这次准备用一个框架来做练习,当然在做之前需要比较一下现在小程序框架的优缺点. 经过认真挑选,选定wepy,Taro,uni-app,mpv ...

  10. Python程序中的进程操作-进程池(multiprocess.Pool)

    目录 一.进程池 二.概念介绍--multiprocess.Pool 三.参数用法 四.主要方法 五.其他方法(了解) 六.代码实例--multiprocess.Pool 6.1 同步 6.2 异步 ...