1317:【例5.2】组合的输出

1317:【例5.2】组合的输出

时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。现要求你用递归的方法输出所有组合。

例如n=5,r=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(1<n<21,1≤r≤n)。

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

【输入样例】
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是未知,不能确定循环次数,且题目要求用递归
  • 遍历过程是一个深度优先搜索,确定第一层(第一个数)后立即确定下一层(下一个数),直到确定叶节点(最后有一个数),由于寻找叶节点这个过程都是一致,所以利用递归+循环遍历即可实现,递归实现上一层和下一层的搜索(例如: 12 4 ,1 2 5同层遍历完后也是靠递归回到第二层,然后再循环遍历得到1 3 4 ,1 3 5),循环遍历则实现同一层的搜索(例如:1 2 3 ,1 2 4 ,1 2 5即通过递归是的循环遍历实现)
  • 由于搜索过程中遍历时可以从上一层得到的数开始遍历,所以可以不需要一个标记数组去标记已经排列过的数
  • 排列的过程是一个树状,不需要考虑如何储存,只需要每次排列的数放到数组a[i]即可,每次递归回到上一层会再赋值,所以不需要考虑数据还原
#include<bits/stdc++.h>
using namespace std;
int n;
int r;
int a[22]={0};//将遍历得到的排列放进数组储存
void dfs(int l); //l表示遍历的深度 ,遍历到第几层即表示求排列的第n个数 
int main(){cin>>n;cin>>r;dfs(1);//从第一个第一层开始遍历 return 0;
}
void dfs(int l){//判断是否遍历完一次 if(l==r+1){for(int i=1;i<=l-1;i++){printf("%3d",a[i]);}cout<<endl;return ;//返回到上一层 }else{//直接从上一个得到的数开始遍历,实现按照字典序排列,如果是全排列则需要一个数组来标记是否遍历过,并在遍历后取消标记 for(int i=a[l-1]+1;i<=n;i++){   a[l]=i;  //遍历第几层即得到第几个数,所以是a[l] //继续遍历得到下一位dfs(l+1); //由于遍历得到一串数后输出,会返回到上一层,继续往下遍历,这是递归+遍历,所以不用单独考虑遍历到 }}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm食用菌菌棒溯源系统的开发与设计论文

食用菌菌棒溯源系统 摘要 随着信息互联网购物的飞速发展&#xff0c;一般企业都去创建属于自己的管理系统。本文介绍了食用菌菌棒溯源系统的开发全过程。通过分析企业对于食用菌菌棒溯源系统的需求&#xff0c;创建了一个计算机管理食用菌菌棒溯源系统的方案。文章介绍了食用菌…

深入理解Mysql MHA高可用集群搭建:从实验到实战

1. 简介 MHA&#xff08;Master High Availability&#xff09;是一个高效的开源MySQL高可用性解决方案。由日本开发者yoshinorim&#xff08;前DeNA员工&#xff0c;现在Facebook&#xff09;创建&#xff0c;MHA支持MySQL的主从复制架构&#xff0c;自动化主节点故障转移。当…

<JavaEE> TCP 的通信机制(五) -- 延时应答、捎带应答、面向字节流

目录 TCP的通信机制的核心特性 七、延时应答 1&#xff09;什么是延时应答&#xff1f; 2&#xff09;延时应答的作用 八、捎带应答 1&#xff09;什么是捎带应答&#xff1f; 2&#xff09;捎带应答的作用 九、面向字节流 1&#xff09;沾包问题 2&#xff09;“沾包…

Go配置镜像源

1. 简介 GOPROXY是一个加速Go语言包下载和更新的工具。它通过镜像源的方式&#xff0c;帮助开发者快速获取Go语言包&#xff0c;提高开发效率。GOPROXY的使用非常简单&#xff0c;只需在终端中设置其地址&#xff0c;然后使用go get、go mod等命令即可享受更快的下载速度。对于…

帕金森病的病因是什么?

帕金森病是一种常见的神经系统变性疾病&#xff0c;其确切的病因尚未完全明了&#xff0c;但可以确定的是&#xff0c;它是多种因素共同作用的结果。下面将从多个方面详细介绍帕金森病的病因。 首先&#xff0c;年龄老化是帕金森病发病最主要的因素之一。随着年龄的增长&#…

node实现对git仓库的管理

一、项目背景 一份代码&#xff0c;发布多个小程序。想让技术支持部通过脚本自己获取代码&#xff0c;并通过脚本自动提交到客户的小程序后台。他们自行发布。 现已注册第三方平台&#xff0c;开发人员通过“开发小程序”上传模板。开发人员把代码上传到模板&#xff0c;支持…

JavaSE基础50题:28.(数组练习)冒泡排序

概述 给定一个整型数组&#xff0c;实现冒泡排序。 如&#xff1a;给一组数组{5&#xff0c;10&#xff0c;8&#xff0c;3&#xff0c;7}进行冒泡排序。 j一直往下走&#xff0c;和下一个数字进行比较&#xff0c;如果当前数字大于下一个数字&#xff0c;则两个数字交换&…

【Java干货教程】JSON,JSONObject,JSONArray类详解

一、定义 JSON&#xff1a;就是一种轻量级的数据交换格式&#xff0c;被广泛应用于WEB应用程序开发。JSON的简洁和清晰的层次结构&#xff0c;易于阅读和编写&#xff1b;同时也易于机器解析和生成&#xff0c;有效的提升网络传输效率&#xff1b;支持多种语言&#xff0c;很多…

ERROR: No matching distribution found for torch==2.0.1解决方案

大家好&#xff0c;我是水滴~~ 本文主要介绍在安装 stable-diffusion-webui 时出现的 ERROR: No matching distribution found for torch2.0.1 问题的解决方案&#xff0c;希望能对你有所帮助。 《Python入门核心技术》专栏总目录・点这里 文章目录 问题描述解决方案离线安装 …

Mysql相关面试题及答案

1、什么是MySQL&#xff1f; MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它基于SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;进行操作。MySQL是最流行的数据库系统之一&#xff0c;特别是对于Web应…

对于高速链路,需要考虑 TVS 管结电容的要求

TVS管,即瞬态电压抑制器,是一种用于保护电路免受瞬态过电压损害的半导体器件。在高速链路(如USB、HDMI、以太网等)中,TVS管被广泛用于抑制外部电涌、静电放电(ESD)等引起的瞬态电压,以保护敏感的电子组件。 TVS管的结电容:是在TVS管的PN结上形成的固有电容…

前端通过增加XHR钩子来全局增加header

引言 前端通过修改 XHR 原型来全局增加 header 是采用 XMLHttpRequest 加 hook 方式实现一个简单业务场景。这样可以提高代码的可维护性和可扩展性&#xff0c;减少重复代码的编写。 比如&#xff0c;在用户登录后&#xff0c;后端返回了一个 token&#xff0c;前端需要在发送…

PostgreSQL 数据库归档最近被问及的问题问题 与 4 毋 处世学

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共1790人左右 1 2 3 4 5&#xff0…

小型企业成为网络犯罪分子获取数据的目标

在过去十年的大部分时间里&#xff0c;网络犯罪的巨额资金来自针对大型组织的勒索软件攻击。这种威胁仍然存在。但犯罪分子可能会将注意力转向中小企业 (SMB)。这对消费者的影响将是巨大的。 将软件即服务 (SaaS) 技术用于核心业务功能继续将中小企业整合到全球供应链中。由于…

优雅的处理tkMapper批量插入、分批次插入

Springboot框架下tkMapper想实现批量插入&#xff0c;一般是需要自定义BaseMapper来继承InsertListMapper tkmapper提供的有两个insertList方法&#xff0c; 一个支持主键自动生成 tk.mybatis.mapper.additional.insert 一个不支持主键生成 tk.mybatis.mapper.common.specia…

Linux期末考试复习

gcc编译 案例.c源代码-E预处理后.i文件gcc -E test.c -o test.i-S编译后.s文件gcc -S test.i -o test.s-c汇编.o文件 库文件gcc -c test.s -o test.o-I 链接后目标文件 gcc 不使用 –E、–S 和 –c选项&#xff0c;则会依次自动执行预处理、编译和汇编。 头文件#include <…

Java内存溢出如何解决,Java oom排查方法,10个定位解决办法

引言 在Java开发过程中&#xff0c;有效的内存管理是保证应用程序稳定性和性能的关键。不正确的内存使用可能导致内存泄露甚至是致命的OutOfMemoryError&#xff08;OOM&#xff09;。为了避免这些问题&#xff0c;本文将分享10个关于Java内存管理的实用技巧。 正文 1、使用…

2023年的技术回顾

技术趋势 在人工智能领域&#xff0c;2023年见证了AI技术的快速发展&#xff0c;包括新的算法、模型的改进以及AI在各个领域的广泛应用。深度学习、机器学习、自然语言处理等领域取得了显著的进步&#xff0c;推动了AI在语音识别、图像识别、自动驾驶、医疗诊断等领域的应用。…

Chatgpt如何共享可以防止封号!

ChatGPT 是一个基于 GPT-3.5/GPT-4 模型的对话系统&#xff0c;它主要用于处理自然语言对话。通过训练模型来模拟人类的语言行为&#xff0c;ChatGPT 可以通过文本交流与用户互动。每个新版本的 GPT 通常都会在模型规模、性能和其他方面有一些改进。在目前免费版GPT-3.5 中&…

OpenWrt版本更迭说明

以下是OpenWrt的主要版本历史&#xff1a; OpenWrt 0.9&#xff1a;2004年发布的最初版本。 OpenWrt 7.09&#xff1a;2007年发布&#xff0c;支持超过100个路由器模型。 OpenWrt 8.09&#xff1a;2009年发布&#xff0c;引入了“Backfire”代码名称&#xff0c;添加了多个硬…