[递归] 指数型枚举

题目描述

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


输入

​ 输入一个整数 n。(1≤n≤10)

输出

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

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


样例输入
3
样例输出
1
1 2
1 2 3
1 3
2
2 3
3
样例输入2
4
样例输出2
1
1 2
1 2 3
1 2 3 4
1 2 4
1 3
1 3 4
1 4
2
2 3
2 3 4
2 4
3
3 4
4

数据规模与约定

​ 时间限制:1 s

​ 内存限制:256 M

​ 100% 的数据保证 1≤n≤10

解题分析

本题要求我们去按照字典序去枚举排列,我们考虑使用递归函数去枚举,并且用一个数组去记录我们枚举的结果,并在一个合适的位置去输出。

我们设定一个函数f(i,j),i表示我们当前枚举的位置,而j表示当前我们枚举的位置最小可以放置的数字。这样可以保证我们在不断向后递归的过程中可以确保数字是递增的。

使用递归的方式来解决问题,通过不断调用自身来生成所有可能的选择方案。下面是对代码解决问题的思路和想法的详细阐述:

  1. 首先,代码定义了一个全局变量n和一个数组array,用于存储选择方案中的数字。

  2. printfresult 函数用于打印当前选择方案中的数字,它接受一个参数l,表示当前选择方案的长度。该函数会遍历数组array,打印数组中的元素,并在最后一个元素后面不加空格。

  3. f 函数是核心函数,它用于生成所有可能的选择方案。它接受两个参数,i和j,表示当前选择方案的长度和下一个要选择的数字。该函数的逻辑如下:

    • 首先,判断递归结束的条件。如果i大于等于n或者j大于n,说明已经选择完毕,直接返回。
    • 然后,使用一个循环从j遍历到n,将当前数字k存入数组array的第i个位置。
    • 调用printfresult函数打印当前选择方案。
    • 递归调用f函数,将i加1,j加1,继续生成下一个选择方案。
  4. main 函数用于读取输入和调用f函数。首先,读取输入的整数n。然后,调用f函数,初始时i为0,j为1,开始生成选择方案。

这段代码的思路比较简单,通过递归和循环的组合,实现了生成所有可能的选择方案并按照要求输出的功能。代码的时间复杂度为O(2n),因为对于每个数字,都有选择和不选择两种情况,总共有2^n种情况。代码的空间复杂度为种情况。代码的空间复杂度为O(n),因为使用了一个长度为n的数组来存储选择方案。

#include <iostream>
using namespace std;int n,array[10];void printfresult(int l){for(int i=0;i<=l;i++){printf("%d",array[i]);if(i!=l) printf(" ");else printf("\n");}
}void f(int i,int j){if(i>=n || j>n){return;}for(int k=j;k<=n;k++){array[i]=k;printfresult(i);f(i+1,k+1);}
}int main(){scanf("%d",&n);f(0,1);return 0;
}

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

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

相关文章

06-C++ 类和对象-多态

类与对象 多态 1. 简介 一个事物的多种形态&#xff0c;简称多态。 物的多态 同一个人在不同人面前&#xff0c;角色不同 如&#xff1a; 在父母面前在对象面前在朋友面前在同事面前 事的多态 同一种事情&#xff0c;在不同情况下展现不同 如&#xff1a; 吃饭 中国人 筷子 …

8天狂收6100颗星,可商用!东京工业、麻省理工等开源Stream Diffusion

加州大学伯克利分校、东洋大学、东京工业大学、麻省理工学院和筑波大学等研究人员&#xff0c;联合开源了一款创新性实时交互图像生成框架——Stream Diffusion。 Stream Diffusion的技术创新点在于&#xff0c;将传统的顺序去噪变成流批处理去噪&#xff0c;消除了漫长的等待…

install mpirun

ubuntu install mpirun : sudo apt install mpich centos install mpirun: download mpich-4.1.2.tar.gz from Downloads | MPICH tar xf mpich-4.1.2.tar.gz cd mpich-4.1.2 ./configure --disable-fortran make;make install

vue项目hdr格式文件放在assets下rgbeloader.load获取不到问题解决

如下图 我再App.vue组件中这样写 艾特符号定位 告诉系统 要src下的assets下的xhdr下的xidis.hdr 但是运行项目 他会告诉你找不到这个资源 我们改一下 我们组件时 App.vue 与assets同在 src目录下 用 ./去找 这样也是找不到的 我们需要将它放在静态资源包public下 public路…

JS变量、作用域与内存

JavaScript是一种动态类型语言&#xff0c;它的变量声明和作用域有自己独特的规则。在JavaScript中&#xff0c;变量和作用域与内存管理密切相关&#xff0c;因此本文将深入探讨这些主题&#xff0c;以帮助我们更好地理解JavaScript中的变量、作用域和内存。 变量 在JavaScri…

CDSP考取的价值:成为数据安全认证专家的好处

哈喽IT的朋友们&#x1f44b;&#xff0c;今天想和大家聊聊一个超级有用的专业认证&#xff1a;CDSP&#xff0c;也就是数据安全认证专家。如果你在数据安全领域或者对这方面感兴趣&#xff0c;这个认证绝对值得你去考取哦&#xff01; 1.&#x1f393;提升专业性&#xff1a;获…

MCEWMDRMNDBootstrap.dll文件丢失,软件游戏无法启动,怎样下载修复

不少小伙伴反馈&#xff0c;在打开某些游戏或软件的时候&#xff0c;Windows会提示“MCEWMDRMNDBootstrap.dll文件丢失&#xff0c;软件无法启动”&#xff0c;不知道应该怎样办&#xff1f; 首先&#xff0c;我们先来了解“MCEWMDRMNDBootstrap.dll文件”是什么&#xff1f; …

单片机开发从小工到专家

有道无术&#xff0c;术尚可求&#xff1b;有术无道&#xff0c;止于术 背景 向单片机嵌入式开发小伙伴推荐了几本书&#xff0c;阅读量破10 1. 适用范围 2. 书籍推荐 书籍推荐 3. 大师介绍 大师介绍 4. 大师书籍编写逻辑 25年大师出版的关于&#xff1a;嵌入式单片…

如何破解新版 NVIDIA GRID vGPU License Server (DLS)

文章首发在我的个人网站 http://841973620.net/index.php/archives/dls-cracked.html 前排提醒&#xff0c;闲鱼有不法商家修改许可然后出售的&#xff0c;挂这儿给大家避个雷 众嗦粥汁&#xff0c;新版的licserver不再通过验证MAC地址进行授权&#xff0c;而改为上传本地凭…

Oracle数据库中的基本初始化参数

基本初始化参数就是类型为Basic的初始化参数。大多数数据库只需要设置数据库基本初始化参数即可正确有效地运行。Oracle 建议您熟悉基本参数&#xff0c;并且仅在功能文档指示或特殊情况下使用其他参数。 文档1.2 Basic Initialization Parameters中&#xff0c;列出了27个&am…

wireshark access/trunk/hybrid报文分析

1&#xff0c;access接口 发送带vlan的报文 wireshark交换机配置 [Huawei-GigabitEthernet0/0/1] [Huawei-GigabitEthernet0/0/1]port link-type access [Huawei-GigabitEthernet0/0/1]port default vlan 100 [Huawei-GigabitEthernet0/0/2]port link-type access [Huawei-Gig…

安卓下Application和Activity的Context获取

情形一&#xff1a;Activity中 通过getApplication()获得Application&#xff0c;其本身也是一个的Context&#xff0c;也可以通过getApplicationContext()获得Application的Context&#xff0c;结果一样。 而this表示当前的Activity对象&#xff0c;其本身也是一个的Context…

(二)linux使用docker容器运行mysql

前言&#xff1a;在上一章安装好linux环境后&#xff0c;开始搭建msyql数据库&#xff0c;之前都是用windows安装mysql的&#xff0c;即使在linux上安装也是用tar解压&#xff0c;然后一堆的配置东西&#xff0c;现在用docker就是爽&#xff0c;几行命令就行 我这里就只放上几…

Dockerfile - 基于 SpringBoot 项目自定义镜像(项目上线全过程)

目录 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 1.2、打包项目&#xff08;jar&#xff09; 1.3、编写 Dockerfile 文件&#xff0c;构建镜像 1.4、运行镜像并测试 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 a&#xff09;简…

SonarQube安装踩坑记录

如果用java1.8和mysql&#xff0c;则SonarQube版本不能超过7.8&#xff0c;看这里。 SonarQube7.8安装包地址&#xff1a; https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip 安装步骤&#xff1a; 1、下载SonarQube安装包 wget https://binari…

antv/x6_2.0学习使用(一、安装引入)

安装引入 安装 通过 npm 或 yarn 命令安装 x6 # npm $ npm install antv/x6 --save# yarn $ yarn add antv/x6安装完成之后&#xff0c;使用 import 进行引用 import { Graph } from antv/x6;通过 script 标签引入 可以使用下面三个 CDN 中的任何一个&#xff0c;默认返回…

几代WiFi有什么差异,它们有什么区别

最典型的差异指标&#xff1a;单流传输速率 第一代 基于的标准&#xff1a; 802.11 使用频率&#xff1a;2.4GHz 单流最大传输速率&#xff1a;2Mbit/s 第二代 基于的标准&#xff1a; 802.11b 使用频率&#xff1a;2.4GHz 单流最大传输速率&#xff1a;11Mbit/s 第三代 …

Anolis安装Jdk保姆级教学

前言 欢迎来到本博客&#xff0c;我们将带领你完成在Anolis操作系统上安装Java Development Kit&#xff08;JDK&#xff09;的详细过程。Anolis操作系统是一款基于Linux的轻量级操作系统&#xff0c;专为容器和云原生应用而设计。在Anolis上安装JDK将为你提供一个稳定、高效的…

洛谷:集合与前缀和

1.亲戚(并查集) #include<iostream> using namespace std; int n,m,p; int m1,m2,p1,p2; int f[5005];int find(int x)//查询根节点&#xff0c;根节点的标志是根节点的父节点是自己 {if(f[x]!x)f[x]find(f[x]);//路径压缩&#xff0c;父节点变为根节点,方便下次询问retu…

php中实现3DES算法(ECB加密模式PKCS5Padding填充)

讲道理&#xff0c;一提到3DES算法&#xff0c;首先想到的是要和java做交互了 现在3DES已经渐渐被抛弃了&#xff0c;尤其是ECB加密模式使用的更少了&#xff0c;但是没办法&#xff0c;业务需要&#xff0c;合作方用的是他&#xff0c;你头再铁也不能怎样&#xff0c;那就扒扒…