洛谷P1157详解(两种解法,一看就会)
一、问题引出
组合的输出
题目描述
排列与组合是常用的数学方法,其中组合就是从 n n n 个元素中抽出 r r r 个元素(不分顺序且 r ≤ n r \le n r≤n),我们可以简单地将 n n n 个元素理解为自然数 1 , 2 , … , n 1,2,\dots,n 1,2,…,n,从中任取 r r r 个数。
现要求你输出所有组合。
例如 n = 5 , r = 3 n=5,r=3 n=5,r=3,所有组合为:
123 , 124 , 125 , 134 , 135 , 145 , 234 , 235 , 245 , 345 123,124,125,134,135,145,234,235,245,345 123,124,125,134,135,145,234,235,245,345。
输入格式
一行两个自然数 n , r ( 1 < n < 21 , 0 ≤ r ≤ n ) n,r(1<n<21,0 \le r \le n) n,r(1<n<21,0≤r≤n)。
输出格式
所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。
注意哦!输出时,每个数字需要 3 3 3 个场宽。以 C++ 为例,你可以使用下列代码:
cout << setw(3) << x;
输出占 3 3 3 个场宽的数 x x x。注意你需要头文件 iomanip。
样例 #1
样例输入 #1
5 3
样例输出 #1
1 2 31 2 41 2 51 3 41 3 51 4 52 3 42 3 52 4 53 4 5
二、解法一:拼接字符串,然后再cout
毫无疑问,这题肯定是深度优先搜索就能解决的问题,但与普通题目存在的一个不同点就是如何去按题中所述的要求去输出,在方法一当中我采用的是拼接字符串的方式,示意图如图所示:图中的cout并不是真正的cout,而是为了起一个示意的作用,由于篇幅有限,因此我只画出了一个深度方向上的。

有一个需要注意的点是,题中要求的是set(w)为3并按右对齐输出,由于我们这里是用字符串拼接的方式进行的,因此需要注意当数字为1位的时候我们要加2个空格,当数字为2位时加1个空格,代码如图所示:
#include <iostream>
#include <iomanip>
using namespace std;
int n,r,a[22];
void dfs(int m,string s,int startx)
{if (m==r){cout<<s<<endl;return;}for (int i = startx; i <= n; i++){string t;if (a[i]>9){t=" "+to_string(a[i]);}else{t=" "+to_string(a[i]);}dfs(m+1,s+t,i+1);}return;
}
int main()
{cin>>n>>r;for (int i = 1; i <= n; i++){a[i]=i;}dfs(0,"",1);
}
解法二:直接cout
直接cout时,虽然仍是采用深度优先的方式,但细节相比于上面就要做出改变了,

在此解法当中,我们的dfs函数当中的变量m充当了解法一当中变量m的作用,只不过我们此时是从1开始的(因为我们需要访问a[k-1],所以为了防止数组越界,k的值必须从1开始),此外我们的数组a的作用也与解法一有很大的不同:解法一的数组a是写死的,起一个访问元素的作用,但在此解法当中是动态变化的 ,并在每一步当中都对其赋予当前值。最终当我们成功访问了r个元素的时候我们就输出。
代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
int n,r;
int a[22];
void dfs(int k)
{if(k>r){for (int i = 1; i <= r; i++){cout<<setw(3)<<a[i];}cout<<endl;return;}for (int i = a[k-1]+1; i <= n; i++){a[k]=i;dfs(k+1);}
}
int main()
{cin>>n>>r;dfs(1);
}
相关文章:
洛谷P1157详解(两种解法,一看就会)
一、问题引出 组合的输出 题目描述 排列与组合是常用的数学方法,其中组合就是从 n n n 个元素中抽出 r r r 个元素(不分顺序且 r ≤ n r \le n r≤n),我们可以简单地将 n n n 个元素理解为自然数 1 , 2 , … , n 1,2,\dot…...
JavaScript异步编程和回调
目录 1、编程语言中的异步 2、JavaScript 3、回调 3.1在回调中处理错误 3.2回调的问题 3.2回调的替代方案 1、编程语言中的异步 默认情况下,JavaScript是同步的,并且是单线程…...
Qt开发笔记(Qt5.9.9下载安装环境搭建win10)
#1 Qt下载网站(国内、国外镜像) #2 Qt5.9.9安装选项 #3 配置系统环境变量 #4 创建测试项目 #1 Qt下载网站(国内、国外镜像) 官方下载地址(慢):http://download.qt.io/ 国内镜像网站 这里给大家…...
使用Plist编辑器——简单入门指南
本指南将介绍如何使用Plist编辑器。您将学习如何打开、编辑和保存plist文件,并了解plist文件的基本结构和用途。跟随这个简单的入门指南,您将掌握如何使用Plist编辑器轻松管理您的plist文件。 plist文件是一种常见的配置文件格式,用于存储应…...
Python常用的开发工具合集
Python是一种功能强大且易于学习的编程语言,被广泛应用于数据科学、机器学习、Web开发等领域。随着Python在各个领域的应用越来越广泛,越来越多的Python开发工具也涌现出来。但是,对于新手来说,选择一款合适的Python开发工具可…...
机器学习之线性回归
往期目录 python在线性规划中的应用 文章目录 一、线性回归算法概述1.1 什么是线性回归?1.2 线性回归算法原理1.3 线性回归的应用场景 二、线性回归算法Python实现2.1 导入必要的库2.2 随机生成数据集2.3 拟合模型2.4 预测结果2.5 结果可视化 三、完整代码 线性回归…...
中国系统正式发声!所有用户永久免费,网友:再见了,CentOS!
点关注公众号,回复“1024”获取2TB学习资源! 如果说:没有操作系统会怎么样? 对于个PC来说,无论是台式机、笔记本、平板等等,一切都变的一无是处,这些硬件对我们来说,和一堆废铁没什么…...
Oracle数据库坏块类故障
正常的数据块有其特有的固定格式,如果某数据块内部出现了混乱而导致Oracle无法读取,则可称其为坏块。数据库坏块的影响范围可大可小,严重时会导致数据库无法打开。当数据库出现坏块时,一般出现ORA-01578错误、ORA-10632错误或者OR…...
andorid之摄像头驱动流程--MTK平台
camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过DSP加工出来,然后在通过IO接口传输到CPU处理。 由于摄像头满足总线、驱动、设备模型,…...
Android9.0 iptables用INetd实现屏蔽ip黑名单的实现
1.前言 在9.0的系统rom定制化开发中,在system中netd网络这块的产品需要中,会要求设置屏蔽ip地址之内的功能,liunx中iptables命令也是比较重要的,接下来就来在INetd这块实现屏蔽ip黑名单的的相关功能,就是在app中只能屏蔽某个网址,就是除了这个网址,其他的都能上网,最后…...
介绍一下json
目录 介绍一下json Elasticsearch7.6学习指南 介绍一下json JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以易于阅读和编写的文本形式表示结构化数据。JSON最初是由Douglas Crockford在2001年提出的,它在we…...
DI依赖注入环境
1.构造器注入 上一章节已经说过了: <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoca…...
《程序员面试金典(第6版)》面试题 16.18. 模式匹配(暴力破解 + 剪枝)
题目描述 你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。 例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a&q…...
一天吃透SpringCloud面试八股文
1、什么是Spring Cloud ? Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。 Sprin…...
java生成图片缩略图
目录 前言一、使用Base64编码方式1、基本方法2、压缩本地图片保存到本地3、压缩网络图片到图片服务器 二、使用thumbnailator工具方式1、导入依赖2、压缩本地图片保存到本地 前言 下面介绍了两种获取图片缩略图的方式,全都不是一次性压缩,如果没有达到设…...
《统计学习方法》——隐马尔可夫模型(下)
学习算法 HMM的学习,在有观测序列的情况下,根据训练数据是否包含状态序列,可以分别由监督学习算法和无监督学习算法实现。 监督学习算法 监督学习算法就比较简单,基于已有的数据利用极大似然估计法来估计隐马尔可夫模型的参数。…...
Liunx top 命令详解
文章目录 top补充说明语法选项top交互命令实例 top 显示或管理执行中的程序 补充说明 top命令 可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。 语法…...
基于 SpringBoot 的医院固定资产系统
本文将介绍基于 SpringBoot 技术的医院固定资产系统的设计和实现。医院固定资产管理是医疗机构管理工作的重要组成部分,它对医院的正常运营和管理具有重要的意义。本系统的设计和实现将有助于医疗机构更好地管理和维护其固定资产。 1. 系统需求分析 医院固定资产管…...
【企业信息化】第2集 免费开源ERP: Odoo 16 销售管理系统
文章目录 前言一、概览二、使用功能1.通过清晰报价提高销售效率2.创建专业报价单3.管理订单及合同4.简化沟通5.维护产品&价格6.直观的报告7.集成 三、总结 前言 世界排名第一的免费开源ERP: Odoo 16 销售管理系统。通过Odoo Sign应用程序和在线支付,发送报价。…...
浅谈数据治理
大家好 ,近年来,数据治理成为挖掘数据价值的重要手段和工具。随着大数据平台和工业互联网兴起,数据治理平台主要采用数据中台技术和微服务架构初步替代传统架构,面向大数据架构下,为数据资源中心与外部数据系统提供数据…...
Phi-4-Reasoning-Vision新手教程:上传图片→输入问题→获取带思考链答案
Phi-4-Reasoning-Vision新手教程:上传图片→输入问题→获取带思考链答案 1. 工具简介 Phi-4-Reasoning-Vision是一款基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具。它专为双卡4090环境优化,能够处理图片和文本的复杂推理任务。…...
实例化需求管理化技术实例化需求文档
实例化需求管理技术:让需求文档活起来 在软件开发中,需求文档是项目成功的关键,但传统文档往往因冗长、模糊或脱离实际而失效。实例化需求管理技术(Specification by Example, SBE)通过将需求转化为具体实例ÿ…...
2026奇点大会闭门报告流出:图像描述生成正面临“语义坍缩”危机,这4类业务场景已触发告警
第一章:2026奇点智能技术大会:图像描述生成 2026奇点智能技术大会(https://ml-summit.org) 核心任务与技术演进 图像描述生成(Image Captioning)在2026奇点智能技术大会上被确立为多模态理解的关键落地范式。本届大会展示的最新…...
五大页面置换算法实战对比:从理论到实现的性能优化指南
1. 页面置换算法:内存管理的隐形裁判 当你的电脑同时运行十几个程序却依然流畅时,背后其实是页面置换算法在默默工作。想象一下内存就像一家网红餐厅的有限座位,而进程就是源源不断的顾客。页面置换算法就是那位决定"让哪桌客人暂时离开…...
VQA系统进入毫秒级响应时代(2026奇点大会闭门报告首次披露)
第一章:VQA系统进入毫秒级响应时代(2026奇点大会闭门报告首次披露) 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点大会闭门技术报告中,三所联合实验室(MIT CSAIL、DeepMind VQA Group、中科院自动化所视觉…...
终极指南:Gumbo Parser重构如何实现30-40%性能飞跃?完整技术分析
终极指南:Gumbo Parser重构如何实现30-40%性能飞跃?完整技术分析 【免费下载链接】gumbo-parser An HTML5 parsing library in pure C99 项目地址: https://gitcode.com/gh_mirrors/gum/gumbo-parser Gumbo Parser作为一款纯C99编写的HTML5解析库…...
day02统计师考试(初级)统计法的特点
统计法的特点 (一)调整对象具有特殊性和复杂性 1.调整对象的特殊性: 统计法以统计活动中形成的社会关系为调整对象。 2.调整对象的复杂性: ①调整的社会关系既有纵向的管理关系,也有横向的指导关系; ②既有…...
Redis 常用数据类型
下面给你一套面试最标准、逻辑清晰、直接背诵的版本: Redis 常用数据类型 使用场景 底层原理 面试话术,一次性讲全。 一、开场一句话(必说) Redis 是基于内存的高性能 KV 数据库,支持丰富的数据结构,通过…...
基于单片机的智能太阳能热水器设计(有完整资料)
资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T0852310M设计简介:本设计是基于单片机的智能太阳能热水器设计,主要实现以下功能:通过温度传感器检测水温 通过超声波模…...
Unity HDRP 2022.3水系统实战:从泳池到海洋,用Shader Graph调出电影级水体效果
Unity HDRP 2022.3水系统实战:从泳池到海洋,用Shader Graph调出电影级水体效果 当阳光穿透清澈的泳池水面,在池底投下摇曳的光斑;或是暴风雨中翻滚的巨浪,带着白色泡沫拍打礁石——这些令人屏息的视觉奇观,…...
