在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. golang-基础

    1.go的特点 兼具动态语言的开发效率与C,C++,java的性能安全性 ,内置编译器 2.go的安装 go的sdk下载:  https://studygolang.com/dl go的IDE下载: ...

  2. SQL高效运行注意事项(四)

    为了SQLSERVER能高效运行,SQLSERVER的磁盘子系统是一个重要的方面 Avg. Disk Sec/Read 这个计数器是指每秒从磁盘读取数据的平均值 下面的列表显示这个计数器值的范围,并指 ...

  3. Shell—各种括号的用法

    括号的种类 小括号,圆括号 ( ) 中括号,方括号 [ ] 大括号.花括号 { } 一.单小括号 () 1.另开命令组——小括号中的命令将会新开启一个子shell独立顺序运行,所以括号中的变量不能够被 ...

  4. Python-1-Day

    C = float(input("Enter a degree in Celsius:"))F = (9/5) * C + 32print("{0} Celsius is ...

  5. jt格式文件与3D数据压缩

    介绍 JT是西门子公司推出的PLM通用三维格式,设计为一个开放.高效率的.紧凑,持久性存储的产品数据格式,用于产品可视化.协作和CAD数据共享.JT文件格式包括多方面的数据,以及对曲面边的精准表示,产 ...

  6. MySQL的基础架构

    TCP/IP看不下去了,我觉得还是从应用层入手,接下来2个月我将主要学习数据库相关和算法知识,网络我一直不熟,所以看起专业书籍很吃力,可以说是浪费时间,这次数据库学习目标是先将方向纠正一下,然后其中的 ...

  7. 201871010116-祁英红《面向对象程序设计(java)》第十四周学习总结

    博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://home.cnblogs.com/u/nwnu-daizh/ 这个作业的要求在哪里 https:/ ...

  8. A1060 Are They Equal (25 分)

    一.技术总结 cnta.cntb用于记录小数点出现的位置下标,初始化为strlen(字符串)长度. q.p用于记录第一个非0(非小数点)出现的下标,可以用于计算次方和方便统计输出的字符串,考虑到前面可 ...

  9. 关闭Chrome浏览器的广告

    生活没有绝对的对与错:代码就不一样了,错了就编译不过,也正是因为这样,编程的人思维有时也会陷入一种狭隘中,这就是把工作和生活没有分开.Win10 右下角的广告就像程序调试中的"警告" ...

  10. postman测试文件上传接口教程

    postman是一个很好的接口测试软件,有时候接口是Get请求方式的,肯定在浏览器都可以测了,不过对于比较规范的RestFul接口,限定了只能post请求的,那你只能通过工具来测了,浏览器只能支持ge ...