HZOJ#236. 递归实现组合型枚举

题目描述

​ 从 1−n 这 n 个整数中随机选取 m个,每种方案里的数从小到大排列,按字典序输出所有可能的选择方案。


输入

​ 输入两个整数 n,m。(1≤m≤n≤10)

输出

​ 每行一组方案,每组方案中两个数之间用空格分隔。

​ 注意每行最后一个数后没有空格。


样例输入

3 2

样例输出

1 2
1 3
2 3

样例输入2

5 3

样例输出2

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

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <stack>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <vector>
using namespace std;// 定义一个长度为10的数组arr,用于存储数据  
int arr[10];  // 定义一个函数print_one_result,用于打印数组arr的一种特定排列结果  
void print_one_result(int n) {  // 循环打印数组arr的前n个元素,每个元素之间用空格隔开  for (int i = 0; i < n; i++) {  if (i) cout << " "; // 如果不是第一个元素,打印一个空格  cout << arr[i]; // 打印当前元素  }  cout << endl; // 换行,打印下一个结果时从新的一行开始  return ; // 函数结束,返回  
}  // 定义一个函数f,用于递归生成所有可能的数组排列  
void f(int i, int j, int n, int m) {  // 如果已经使用了m个不同的元素,打印当前排列结果并结束递归  if (i == m) {  print_one_result(m);  return ;  }  // 对于每个可能的元素k(从j开始到n),赋值给当前位置的元素,并递归调用f生成下一个位置的排列  for (int k = j; k <= n && m - i - 1 <= n - k; k++) {  arr[i] = k; // 将k赋值给当前位置的元素  f(i + 1, k + 1, n, m); // 递归调用f生成下一个位置的排列,j加1是因为当前位置已经使用了k,下一个位置的元素只能在k+1之后  }  return ; // 函数结束,返回  
}  // 主函数,程序从这里开始执行  
int main() {  // 从用户输入中读取n和m的值  int n, m;  cin >> n >> m;  // 调用函数f开始生成排列结果  f(0, 1, n, m);  return 0; // 主函数结束,返回0表示程序正常结束  
}

这段代码是一个C++程序,它的目的是生成所有可能的数组排列,使得数组的前m个元素都是不同的,且每个元素都在1到n的范围内。

具体来说,程序首先从用户输入n和m的值。然后,它调用函数f,该函数递归地生成所有可能的排列。

在函数f中,它首先检查是否已经到达了数组的末尾(即已经使用了m个不同的元素)。如果是,那么它就打印出当前的数组排列,然后返回。

否则,它将遍历数组中下一个元素的潜在值。对于每个可能的值k(从j开始,直到n),它将k赋值给当前位置的元素,并递归地调用函数f,将下一个位置、k+1作为新的j,n作为新的m。

在主函数main中,它从用户输入n和m的值,并调用函数f开始生成排列。

需要注意的是,这个程序没有对输入进行有效性检查,例如确保m小于等于n等。在实际使用时,你可能需要添加这些检查以防止错误输入。

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

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

相关文章

【校招VIP】产品分析之活动策划宣传

考点介绍&#xff1a; 产品的上线运营是非常重要的。应该来说好的产品都是运营出来的&#xff0c;在一运营过程中难免会依靠策划活动来提高产品知名度、用户数。用户粘度等等指标一&#xff0c;如何策划一个成功的活动就显得非常重要。 产品分析之活动策划宣传-相关题目及解析…

存储数据恢复- raid5多块硬盘出现坏道的数据恢复案例

存储数据恢复环境&#xff1a; 某单位一台存储&#xff0c;1个机头4个扩展柜&#xff0c;有两组分别由27块和23块硬盘组建的RAID5阵列。其中由27块磁盘组建的那一组RAID5阵列崩溃&#xff0c;这组RAID5阵列存放是Oracle数据库文件。存储系统上层共划分了11个卷。 存储故障&…

爬虫到底难在哪里?

目录 爬虫到底难在哪里 怎么学习爬虫 注意事项 爬虫工具 总结 学习Python爬虫的难易程度因人而异&#xff0c;对于具备编程基础的人来说&#xff0c;学习Python爬虫并不困难。Python语言本身比较简单易学&#xff0c;适合初学者使用。 爬虫到底难在哪里 爬虫的难点主要包…

DevOps理念:开发与运维的融合

在现代软件开发领域&#xff0c;DevOps 不仅仅是一个流行的词汇&#xff0c;更是一种文化、一种哲学和一种方法论。DevOps 的核心理念是通过开发和运维之间的紧密合作&#xff0c;实现快速交付、高质量和持续创新。本文将深入探讨 DevOps 文化的重要性、原则以及如何在团队中实…

Vue中的指令

指令 指令 (Directives) 是带有 v- 前缀的特殊 attribute。指令 attribute 的值预期是单个 JavaScript 表达式。指令的职责是&#xff0c;当表达式的值改变时&#xff0c;将其产生的连带影响&#xff0c;响应式地作用于 DOM。 常用指令预期简短介绍v-showany显示隐藏元素&…

K8S:K8S自动化运维容器

目录 一.k8s概述 2.为什么要用K8S 3.作用及功能 4.k8s容器集群管理系统 二.K8S的特性 1.弹性伸缩 2.自我修复 3.服务发现和复制均衡 4.自动发布和回滚 5.集中化配置管理和秘钥管理 6.存储编排 7.任务批量处理运行 三.K8S的集群架构 四.K8S的核心组件 1.Master组件 …

PXE网络批量装机(centos7)

目录 前言 一、实验拓扑图 二、PXE的组件 三、配置PXE装机服务器 1、设置防火墙、selinux 2.安装、启动vsftp 3、拷贝系统文件到/var/ftp用于装机 4、配置tftp 5、准备pxelinx.0文件、引导文件、内核文件 6、配置本机IP 7、配置DHCP服务 8、创建default文件 四、配…

Visual Studio中使用预编译头文件

预编译头文件&#xff08;Precompiled Header&#xff0c;PCH&#xff09;是一种C/C编译优化技术&#xff0c;用于提高大型项目的编译速度。PCH 文件包含了常用的头文件的预编译结果&#xff0c;它可以在编译其他源文件之前被加载到内存中&#xff0c;从而减少了重复的头文件解…

Python VScode 配置

在上一章节中我们已经安装了 Python 的环境&#xff0c;本章节我们将介绍 Python VScode 的配置。 准备工作&#xff1a; 安装 VS Code安装 VS Code Python 扩展安装 Python 3 安装 VS Code VSCode&#xff08;全称&#xff1a;Visual Studio Code&#xff09;是一款由微软…

SQL Server进阶教程读书笔记

最近把SQL Server进阶教程重新读了一遍&#xff0c;顺便整理了一下书本中的知识点 1.关键知识点 CASE WHEN ❑ 高手使用select做分支&#xff0c;新手用where和having做分支 ❑ 要写ELSE&#xff0c;要写END&#xff0c;避免未匹配上得到NULL ❑ check到底怎…

应用案例 | 3D视觉引导解决方案汽车零部件上下料

Part.1 行业背景 三维视觉引导技术在国内外汽车零部件领域得到了广泛应用。随着汽车制造业的不断发展和创新&#xff0c;对于零部件的加工和装配要求越来越高&#xff0c;而三维视觉引导技术能够帮助企业实现更精确、更高效的零部件上下料过程。 纵览国外&#xff0c;部分汽车…

如何使用GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。例如在科研编程、绘图领域&#xff1a; 1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言&#xff0c;都可以为你提供相关的代码示例。 2、数据可…

车规微控制器的ECC机制及EMU外设

车规微控制器的ECC机制及EMU外设 文章目录 车规微控制器的ECC机制及EMU外设引言ECC的基本原理ECC RAM的访问方式ECC RAM的初始化SRAM ECC错误注入及EMU外设Flash ECC校验参考文献 引言 ECC是微控制器系统中&#xff0c;用于保障信息安全的常用机制&#xff0c;主要是避免存储设…

IntelliJ IDEA中用git提交代码时忽略文件的设置

设置IDEA自动过滤掉不需要提交的文件或文件夹&#xff1a;如*.iml, .idea,target 文件夹 1、进入idea设置界面 Windows环境&#xff1a;File - Settings - Editor - File Types Mac环境&#xff1a;Preferences… - Editor - File Types 2、在下面的ignore files and folders…

K210-AI视觉

1、颜色识别 image.find_blobs( thresholds, invertFalse, roi, x_stride2, y_stride1, area_threshold10, pixels_threshold10, mergeFalse, margin0, threshold_cbNone, merge_cbNone)thresholds : 必须是元组列表。 [(lo, hi), (lo, hi), …, (lo, hi)] 定义你想追踪…

Java elasticsearch scroll模板实现

一、scroll说明和使用场景 scroll的使用场景&#xff1a;大数据量的检索和操作 scroll顾名思义&#xff0c;就是游标的意思&#xff0c;核心的应用场景就是遍历 elasticsearch中的数据&#xff1b; 通常我们遍历数据采用的是分页&#xff0c;elastcisearch还支持from size的…

面向对象基础

文章目录 面向对象基础一.面向对象介绍二.设计对象并使用三.封装四.This关键字五.构造方法六.标准的Javabean类七.对象内存图八.基本数据类型和引用数据类型九.成员和局部 面向对象基础 一.面向对象介绍 面向:拿,找 对象:能干活的东西 面向对象编程:找东西来做对应的事情 …

面试2:通用能力

15丨如何做好开场&#xff1a;给自我介绍加“特效 第一层&#xff0c;满足面试官对信息的期待 这是对自我介绍的基本要求&#xff0c;把个人信息、主要经历、经验和技能有条理地组织起来&#xff0c; 有逻辑地讲出来。需要找出多段经历的关联性和发展变化&#xff0c;形成连…

两个路由器如何连接设置的方法攻略

一、前言 随着智能家居时代来临&#xff0c;家里的网络部署需求开始复杂起来。往往一个路由器已经不能满足需求或者不利于拓展。两个路由器连接最常见的情况是家中已有一个路由器&#xff0c;并且已经通过这个路由器来正常上网。现在是因某些原因想在不改变已经在用的路由器的设…

将本地jar打包到本地maven仓库或maven私服仓库中

将本地jar包打包到本地的maven仓库中的命令&#xff1a; mvn install:install-file -DgroupIdtebie.applib.api -DartifactIdapiclient -Dversion1.0-SNAPSHOT -Dfile本地jar路径 -Dpackagingjar说明&#xff1a; DgroupId pom中的<groupId></groupId> Dartifact…