c语言的全排列
在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语言的全排列的更多相关文章
- C语言实现全排列
实现全排列,递归实现 #include <stdio.h> #include <stdlib.h> ; void swap(int *a, int *b) { int m; m ...
- C语言实现全排列和回溯法总结
一.递归实现全排列 #include"cstdio" ]; void print_permutation(int n,int *A,int cur){ if(cur==n){ ;i ...
- 漫谈 Clustering (2): k-medoids
上一次我们了解了一个最基本的 clustering 办法 k-means ,这次要说的 k-medoids 算法,其实从名字上就可以看出来,和 k-means 肯定是非常相似的.事实也确实如此,k-m ...
- 递归实现全排列序列C语言实现
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下鄙人用递归回溯的办法,采用C语言实现了全排列序列,用以某些优化方案的原始方案的给定 #incl ...
- C语言程序设计100例之(31):全排列问题
例31 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入格式 n(1≤n≤9) 输出格式 由1-n组成的所有不重复的数字 ...
- 递归实现1-n的全排列(JAVA语言)
思路: For example: 123的全排列= 1在最前面 23的全排列 + 2在最前面 13的全排列 + 3最前面 12的全排列 所以只需交换和最前面元素的位置,生成剩余元素的全排列即可. im ...
- 枚举全排列(包括数列中有重复数)的C语言实现
据说是用了DFS的思想--然鹅并不知道这是DFS. 主要就是选取一个数放到数组相应位置上,然后递归的排列剩下的数组,将剩下的数组递归排列完了之后再把数放回去,然后这一层递归就返回了-- 有重复数的话遇 ...
- 全排列问题(c语言实现)
问题描述: 假设有数组里面存放26个字母,取出n个,以m个排列,计算排列的总数! 注意: (1) m<n (2) 里面的元素不能重复排列 (3)"遇零则止" 核心代码如下: ...
- C语言全排列
#include <stdio.h> int m=5; char s[]="12345"; void Swap(char *a, char *b)//元素交换 { ch ...
随机推荐
- JS 注释
JS 注释 JavaScript 注释可用于提高代码的可读性. 单行注释 // 输出标题: document.getElementById("myH1").innerHTML=&q ...
- RAC ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
重启RAC时发现32004,后来才发现DG已经不存在了standby_archive_dest还在生效中,而background_dump_dest和user_dump_dest并没在pfile中出现 ...
- Linux 内核虚拟地址到物理地址转换讨论【转】
转自:https://blog.csdn.net/sunlei0625/article/details/59476987 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请 ...
- Paper慢慢读 - AB实验人群定向 Learning Triggers for Heterogeneous Treatment Effects
这篇论文是在 Recursive Partitioning for Heterogeneous Casual Effects 的基础上加入了两个新元素: Trigger:对不同群体的treatment ...
- python的imread、newaxis
一:imread 用来读取图片,返回一个numpy.ndarray类型的多维数组,具有两个参数: 参数1 filename, 读取的图片文件名,可以使用相对路径或者绝对路径,但必须带完整的文件扩展名( ...
- Servlet一次乱码排查后的总结
由来 在写一个小小的表单提交功能的时候,出现了乱码,很奇怪request上来的参数全部是乱码,而从数据库查询出来的中文显示到页面正常,锁定肯定是request对象那里出了问题.后来经过排查,发现是我封 ...
- shell通配符, 变量, shell作用域
1. 指定格式输出当前时间: echo `date +%Y%m%d` # 注意使用反引号, +号后面不要有空格 反引号中的东西会被当做命令来执行, 并输出执行的结果 2. $uid用于判断当前是否是 ...
- 使用Runtime的objc_msgSend实现模型和字典的互转
一.介绍 模型转字典,字典转模型,这是开发中最基本的功能.系统类中提供了一个setValuesForKeysWithDictionary方法来实现字典转模型,至于模型转字典,这个就需要使用runtim ...
- Python GUI教程一:Hello World
STEP 1:PyQt5基本介绍 Qt是GUI编程中非常受欢迎,也是非常强大的一个工具. PyQt5 是Qt的Python版本.它大概涵盖了620个类,6000多个函数.PyQt5进行双重许可,开发者 ...
- 基于 Swoole 的轻量级框架 CabalPHP
CabalPHP CabalPHP 是一个基于Swoole的轻量.高效.全异步开源框架. 亮点 全异步单机超高性能,轻松分布式部署 支持HTTP.TCP.websocket等多种协议 完善数据库引擎, ...