- 浏览: 297184 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (272)
- java (42)
- c (49)
- 算法 (29)
- 汇编语言 (3)
- 字符集 (3)
- error (3)
- 搜索引擎 (2)
- 互联网 (18)
- linux (12)
- 网络 (20)
- VMWare (1)
- 面试 (7)
- c++ (55)
- 设计模式 (3)
- db (9)
- office (2)
- FS (1)
- rest (3)
- Ajax (2)
- Spring (2)
- Hibernate (3)
- matlab (1)
- load balancing (8)
- 分布式计算 (2)
- 易语言 (1)
- apache tomcat (1)
- 测试 (1)
- 数据结构 (5)
- 数学 (13)
- 服务器 (9)
- 读后感 (4)
- 好书介绍 (1)
- script (3)
- wordpress (2)
- delphi (21)
- pascal (8)
- xml (3)
- 趣味 (1)
- PHP (3)
- python (13)
- DLL (4)
- openGL (8)
- windows (2)
- QT (28)
- django (7)
- jquery (1)
- 数据挖掘 (7)
- nginx (1)
- js (1)
- mac (1)
- hadoop (3)
- 项目管理 (1)
- 推荐系统 (1)
- html (1)
最新评论
-
晴天1234:
related remove:attention.ibus和u ...
UBUNTU的默认root密码是多少,修改root密码 -
美丽的小岛:
美丽的小岛 写道如上配置好就得了。提示没有OpenGl.dll ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
如上配置好就得了。提示没有OpenGl.dll之类的,再增加入 ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
主要是理清哪两个对象之间的关系,是信号与所有槽的关系或者是槽与 ...
QT之DisConnect -
美丽的小岛:
LPCTSTR类型:L表示long指针 这是为了兼容Windo ...
QString与各种字符串之间的转化
找工作,笔试经常会出现一个题,怎样生成一个集合内所有元素的全排列。刚开始的时候没有觉得这是一个难的问题。其实,当写在试卷上,真的不太会,作答的过程感觉心里没有什么底。
回来后,查了一些资料,看了一些书,对这个问题有一定的认识,举一个例去清晰一下题目的意思,例子为:字符集{1,2,3}的全排列:123,132,312,321,231,213。
进一步认识全排列生成:
进一步方法考察:
经过学习与查找,找到如下的算法描述:
觉得这个算法提供一个实现能枚举全部合条件的数据,用C语言进行一个实现:
看看程序运行结果:#include<stdio.h>
#define N 4
typedef struct node{
int value ;
int flag ;
}node;
node a[N] ;
void init(){
int i ;
for(i = 0 ; i < N ; i++){
a[i].value = i + 1 ;
a[i].flag = 0 ;//向左指向的
}
}
void change_flag(int n){
int i ;
for(i = 0 ; i < N ; i++){
if(a[i].value > n){
a[i].flag = (a[i].flag == 1) ? 0 : 1 ;
}
}
}
void exchange(int x,int y){
int temp ;
int f ;
temp = a[x].value ;
f = a[x].flag ;
a[x].value = a[y].value ;
a[x].flag = a[y].flag ;
a[y].value = temp ;
a[y].flag = f ;
}
int main(){
init() ;
int i , j ,max_ind ;
int max;
int count = 0 ;
while(1){
++count ;
for(i = 0 ; i < N ; i++){
printf("%d",a[i].value) ;
}
printf("\n") ;
max_ind = 0 ;
max = -1 ;
for(i = 0 ; i< N ; i++){//最大的数下标
if(a[i].flag){//向右指
if( i < N-1 && a[i+1].value<a[i].value && max < a[i].value) {
max_ind = i ;
max = a[i].value ;
}//右边的数比较小
}
else{//向左指
if( i > 0 && a[i-1].value < a[i].value && max < a[i].value ) {
max_ind = i ;
max = a[i].value ;
}//左边的数比较小
}
}
if(max == -1){break ;}
change_flag(a[max_ind].value) ;
if(a[max_ind].flag){//向右指时,与右边的交换
j = max_ind + 1 ;
}
else{//向左指,与左边的与之交换
j = max_ind - 1 ;
}
exchange(max_ind,j) ;
}
printf("sum = %d",count) ;
return 0 ;
}
虽然实现了,可是代码一点都不简洁,请各位多多指教。
发表评论
-
vs2008【断点无效】解决方法
2015-04-13 10:05 743有时候,我们在用vs2008调试的时候,会出现断点无效。如下 ... -
C++模板之特化与偏特化详解
2015-01-07 14:44 786转自:http://www.jb51.net/a ... -
c++中的typename与class<转>
2015-01-07 08:51 790在泛型编程的形参表中,关键字typename和class具有 ... -
traits:Traits技术初探
2015-01-06 12:49 755概述:traits是一种特性萃取技术,它在Generic ... -
POD型别
2015-01-06 12:37 731POD全称Plain Old Data。通俗的讲,一个类或结 ... -
c++核心基础知识(内存管理)
2015-01-04 22:22 663内存管理是C++最令人切 ... -
内存分配器<转>
2015-01-04 22:07 1343题记:内存管理一直 ... -
operator new在C++中的各种写法
2015-01-04 19:27 1160http://blog.sina.com.cn/s/blo ... -
可变参数va_list
2014-12-26 17:45 8491.要在函数中使用参数,首先要包含头文件<stdarg ... -
Apriori算法
2014-12-15 12:56 629http://blog.csdn.net/lizhengn ... -
map注意的两个问题
2014-12-11 14:21 600代码1 void main() { ... -
关于C++ const 的全面总结<转>
2014-11-14 12:56 721C++中的const关键字的用法非常灵活,而使用const ... -
C++DLL编程详解
2014-10-08 19:44 1560DLL(Dynamic Link Library)的 ... -
C++&&QT调试时出现的一些错误
2014-10-08 15:14 752错误 原因 解决 ... -
【转】C++ function、bind以及lamda表达式
2014-09-11 09:42 841本文是C++0x系列的第四篇,主要是内容是C++0x中新增 ... -
STL函数对象及函数对象适配器【转】
2014-09-10 09:24 465一 函数对象Functor STL中提供了一元和 ... -
typedef和typename关键字[转]
2014-09-10 09:21 6531、类型说明typedef 类型说明的格式为: type ... -
C/C++中extern关键字详解[转]
2014-09-09 11:38 4691 基本解释:extern可以置于变量或者函数前,以标示变量 ... -
MYSQL在C—API 中可用的函数
2014-08-24 23:03 566mysql_affected_rows() 返 ... -
编辑距离算法
2014-08-14 00:02 930字符串编辑距离: 是一种字符串之间相似度计算的方法。给定两个 ...
相关推荐
全排列c语言实现,经典的算法适合收藏起来看之又看,翻来覆去看
递归算法基本,输出一个数列的全排列,C语言实现
上传之后才发现头文件少了个ctype.h,因为判断非法输入的时候用到了isalpha(),不加这个头文件的话在gcc下会有警告,在VC下可能编译不过! 首先把输入的各个数由小到大进行排序,然后开始 1.找出比右边数字小的第一...
用c语言实现对一个动态数组的全排列,其中保存生成的全排列用了一个二维指针,求全排列用的递归的方法,代码在vc++6.0下调试通过,并附有详细注释。
本源程序经过测试正常运行,且修改数组时有提示修改相关地方即可正确使用,不必理解程序是如何实现(采用递归分治策略实现)的。
实现了全排列算法,每个元素用char类型表示,用递归算法,比较简洁实用。
用C语言实现5个数的排列组合,可以随机生成合格数或者手动输入
JAVA递归实现全排列算法,含实现源代码,如a、b、c、d的全排列为: abcd abdc acbd acdb adcb adbc bacd badc bcad bcda bdca bdac cbad cbda cabd cadb cdab cdba dbca dbac dcba dcab dacb dabc
实现全排列组合的算法,供大家学习与参考。在需要对排列组合做差异分析的时候可以直接使用。例如:几个正则式的不同排列组合对匹配效果的影响
用objective-c实现全排列算法,用数组来保存全排列排列的结果
NULL 博文链接:https://touch-2011.iteye.com/blog/1117554
这是组合数学的全排列生成算法,用C语言实现的,包括四种常见的全排列生成算法,字典序法,循环左移,循环右移,邻位对换的方法。
c语言递归算法实现数列全排列.pdf
利用C++实现的全排列生成算法~~实现数据全排列~
含相同元素的全排列问题,包括实现代码和测试代码,可直接运行,分治算法典型问题
c语言实现的序数法全排列,结合组合数学上的算法
一、递归实现例如,如果集合是{a,b,c},那么这个集合中元素的所有排列是{(a,b,c),(a,c,b),(b,a,c),(b,c,a),(c,a,b),(c,b,a)},显然,给定n个元素共有n!种不同的排列,如果给定集合是{a,b,c,d},可以用下面给出的简单...
主要介绍了C语言实现全排列算法模板的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一种快速便捷的实现N个数全排列的c程序算法