当前位置: 首页 > news >正文

什么时候用到全排列_全排列问题 与 组合排列问题

一、全排列问题(Form.cpp)

【问题描述】

输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

【输入格式】

n(1≤n≤9)

【输出格式】

由1~n组成的所有不重复的数字序列,每行一个序列。(字典序排列)

【输入样例】Form.in

3

【输出样例】Form.out

1  2  3

1  3  2

2  1  3

2  3  1

3  1  2

3  2  1

【解析】

1.看到n只有1~9,那么最简单的方法就是:自己算出9种情况的答案,然后一个一个if来输出,对于本题一定是满分;

2.用9个for来计算答案:

#include

intmain()

{int ans[9];int num[9]={0};//用做记录此数字是否被用过

inti,i1,i2,i3,i4,i5,i6,i7,i8,i9;intn;

scanf("%d",&n);for(i1=1;i1<=n;i1++)//第一层循环

{if(num[i1-1]==1) continue;

ans[0]=i1;

num[i1-1]=1;//标记

if(n>=2)

{for(i2=1;i2<=n;i2++)//第二层循环

{if(num[i2-1]==1) continue;

ans[1]=i2;

num[i2-1]=1;//标记

if(n>=3)

{//第三层循环…………

}else{for(i=0;i<2;i++)

{

printf("%d",ans[i]);

}

printf("\n");

}

num[i2-1]=0;

}

}else{for(i=0;i<1;i++)

{

printf("%d",ans[i]);

}

printf("\n");

}

num[i1-1]=0;

}return 0;

}

这是挺麻烦的……

3.属于2的代码简化版,用函数的递归来缩短代码长度:

#include

intn;int ans[9];int num[9]={0};//用做记录此数字是否被用过

int search(intlevel);intmain()

{

scanf("%d",&n);

search(n);return 0;

}int search(intlevel)//level从n~0进行递归

{if(level==0)//到顶了

{inti;for(i=0;i

{

printf("%d",ans[i]);

}

printf("\n");return 0;

}else{inti;for(i=1;i<=n;i++)

{if(num[i-1]==1) continue;

num[i-1]=1;

ans[n-level]=i;

search(level-1);

num[i-1]=0;//两行刷黄的代码属于典型的回溯

//即“将每一层递归获得的结果保存在一个数组内,等递归结束返回时,再将结果复原” 的思想

//有利于递归时保存数据

}return 0;

}

}

PS:在search函数的else中的for里,从1-n的循环有助于将答案按照字典序输出。

2、组合的输出(Compages.cpp)

【问题描述】

排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r

现要求你用递归的方法输出所有组合。

例如n=5,r=3,所有组合为:

l 2 3   l 2 4   1 2 5   l 3 4   l 3 5   1 4 5   2 3 4   2 3 5   2 4 5   3 4 5

【输入】

一行两个自然数n、r(1

【输出】

所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。

【样例】

输入:5   3

输出:         1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

【解析】

此题与第一题极为相似,当这里 n==r 时,就是第一题的解法。

然而这里的r不一定与n相等,大家对比一下第一题的程序,发现有什么变化了吗?

火眼金睛大比拼:

#include

intn,r;int ans[9];int num[9]={0};//用做记录此数字是否被用过

int search(intlevel);intmain()

{

scanf("%d%d",&n,&r);

search(r);return 0;

}int search(intlevel)

{if(level==0)//到顶了

{inti;for(i=0;i

{

printf("%d",ans[i]);

}

printf("\n");return 0;

}else{inti;for(i=1;i<=n;i++)

{if(num[i-1]==1) continue;

num[i-1]=1;

ans[r-level]=i;

search(level-1);

num[i-1]=0;

}return 0;

}

}

没错,我们将控制 寻找数字个数 的变量全部换成了r,这样它就和第一题解法一模一样了。(回溯)

相关文章:

  • gis怎么提取水系_ArcGIS水文分析实战教程(7)细说流域提取
  • ios long转float_iOS设计中字符串NSString与int及float之间的转换
  • mysql show命令用不了_MySQL SHOW 命令的使用
  • php和mysql的英文文献_毕业论文通过PHP访问MySQL外文文献
  • java字符相似_java字符串相似度算法
  • java反编译工具jadclipse_java反编译工具jad及jadclipse
  • java watch service_Java WatchService API 教程
  • deepin 15.4 mysql_Deepin 15.4 编译安装 LNMP(PHP 5.6.31 + Nginx 1.12.1 + MySQL 5.6.36)
  • java if else嵌套_替代嵌套If Else语句
  • oom java问题_Java OOM问题如何排查
  • java 视图对象_java – 从不同资源创建视图对象的最佳方法(模式?)
  • java where函数_CONSTRUCT / WHERE中的SPARQL函数
  • mysql上机考试_SQL上机试题及步骤
  • 2d unity 多物体 射线_Unity 2D射线与 3D射线 UI射线
  • java数据如何显示在HTML界面_ajax接收后台数据在html页面显示
  • 【React系列】如何构建React应用程序
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Angular4 模板式表单用法以及验证
  • axios 和 cookie 的那些事
  • java中的hashCode
  • js
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue2.0 实现互斥
  • 安卓应用性能调试和优化经验分享
  • 浮现式设计
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 聊聊sentinel的DegradeSlot
  • 你真的知道 == 和 equals 的区别吗?
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • # 飞书APP集成平台-数字化落地
  • #android不同版本废弃api,新api。
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • .Family_物联网
  • .net CHARTING图表控件下载地址
  • .net core 依赖注入的基本用发
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net 知识杂记
  • .net打印*三角形
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .NET使用存储过程实现对数据库的增删改查
  • ?
  • @property python知乎_Python3基础之:property
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [AAuto]给百宝箱增加娱乐功能
  • [docker] Docker的数据卷、数据卷容器,容器互联
  • [Eclipse] 详细设置护眼背景色和字体颜色并导出
  • [Flex] PopUpButton系列 —— 控制弹出菜单的透明度、可用、可选择状态
  • [nginx] 网上最全面nginx教程(近100篇文章整理)
  • [python] os.path说明
  • [Shell]Linux常用快捷键
  • [SoapUI] SoapUI学习视频地址
  • [WebUI Forge]ForgeUI的安装与使用 | 相比较于Auto1111 webui 6G显存速度提升60-75%