第十二届蓝桥杯C++青少年组中/高级组选拔赛2020年11月22日真题解析

一、编程题

第1题:求和

【题目描述】
输入一个正整数 N(N < 100),输出 1 到 N(包含 1 和 N)之间所有奇数的和。
【输入描述】
输入一个正整数 N(N < 100)
【输出描述】
输出 1 到 N 之间的所有奇数的和

【输入样例】

3

【输出样例】

4

答案:
参考代码一:

#include <iostream>
using namespace std;
int main() {int n;cin >> n;int sum = 0;for (int i = 1; i <= n; i++) {if (i % 2 == 1) {sum += i;}}cout << sum << endl;return 0;
}

参考代码二:

#include <bits/stdc++.h>
using namespace std;
int n;
int main() {cin >> n;int sum = 0;for (int i = 1; i <= n; i += 2)sum += i;cout << sum;return 0;
}

本题属于简单题,考察累加器和循环的使用。定义累加器 sum 并初始化为 0,循环枚举i从1到 n,判断i如果为奇数,则累加 sum+=ì。循环结束后输出 sum。对循环理解较好的同学,也可以去掉 ǐ 判断,将 i++改为i+= 2,直接累加,也可达到奇数求和的效果。

第2题:求平方

【题目描述】
平方是一种运算,比如:a 的平方表示 a × a。
例如:2 的平方为 4(也就是 2*2 的积)
例如:4 的平方为 16(也就是 4*4 的积)
输入一个正整数 N(N < 30),输出 1 到 N(包含 1 和 N)之间所有正整数的平方,且所输出的平方数之间以英文逗号隔开。
【输入描述】
输入一个正整数 N(N < 30)
【输出描述】
输出所有正整数的平方数,以英文逗号隔开

【输入样例】

3

【输出样例】

1,4,9

答案:
参考代码一:

#include <iostream>
using namespace std;
int main() {int n;cin >> n;for (int i = 1; i <= n; i++) {cout << i * i;if (i != n) {cout << ",";}}return 0;
}

参考代码二:

#include <bits/stdc++.h>
using namespace std;
int n;
int main() {cin >> n;cout << "1";for (int i = 2; i <= n; i++)cout << ',' << i * i;return 0;
}

本题属于简单题,考察循环的使用。大部分失分的同学主要错在输出格式上。题目中要求输出时用英文逗号隔开,不能加空格或者使用中文逗号,并且最后一个平方数后面不能有英文逗号,因此在循环输出时,判断循环变量i,如果不是输出最后一个数,则输出英文逗号””,否则不输出。

第3题:数位递增数

【题目描述】
一个正整数如果任何一个数位小于等于右边相邻的数位,则称为一个数位递增数。
例如:
1135 是一个数位递增数
1024 不是一个数位递增数
输入一个正整数 n(11<n<10001),输出 11 到 n(包含11和n)中有多少个数位递增数。
例如:输入 15,11 到 15 之间的数位递增数有:11、12、13、14、15。一共有 5 个。
【输入描述】
输入一个正整数 n(11<n<10001)
【输出描述】
输出 11 到 n 中有多少个数位递增数

【输入样例】

15

【输出样例】

5

答案:
参考代码一:

#include <iostream>
using namespace std;
int main() {int n;cin >> n;int cnt = 0;for (int i = 11; i <= n; i++) {int a = i / 10000 % 10; // 万位int b = i / 1000 % 10;  // 千位int c = i / 100 % 10;   // 百位int d = i / 10 % 10;    // 十位int e = i % 10;         // 个位if (a <= b && b <= c && c <= d && d <= e) {cnt++;}}cout << cnt << endl;return 0;
}

参考代码二:

#include <bits/stdc++.h>
using namespace std;
int n;
int main() {cin >> n;int sum = 0;for (int i = 11; i <= n; i++) {string s;stringstream ss;ss << i;ss >> s;int f = 0;for (int j = 1; j <= s.size() - 1; j++)if (s[j] < s[j - 1]) {f = 1;break;}if (!f)sum++;}cout << sum;return 0;
}

本题与之前课上所做的水仙花数、四叶玫瑰数类似,考察循环枚举与数位分离的技巧。
题目中的数据范围为 11~10001,即最少为2位,最多为5位。由题意可知,一个数位递增数,在高位补0后,不会改变数的大小且仍为数位递增数。不妨在高位补 0,将所有的数当做五位数处理。例如,11、12 是数位递增数,处理时看做 00011、00012,仍为数位递增数。补齐五位后,使用数位分离的技巧,依次取出万位 a、千位 b、百位 c、十位 d、个位 e,判断是否高位数字<= 低位数字,如果是数位递增数,则计数器 cnt++,循环结束后输出 cnt,程序结束.

第4题:最短距离

【题目描述】
有一个居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3……,当排满一行时,从下一行相邻的楼往反方向排号。
例如:小区为 3 行 6 列,矩阵排列方式:
在这里插入图片描述

要求:已知小区楼房有 w 列及两个楼房楼号 m 和 n,求从 m 号楼到 n 号楼之间的最短路线经过几个楼(不能斜线方向移动)。
例如上图:当 w=6,m=8,n=2,从 8 号楼到 2 号楼最短的路线经过 5,4,3,2 四个楼(9,10,11,2 也经过四个楼),故最短路线为 4(注:不考虑路线只考虑最短路线经过几个楼)。
输入三个正整数 w(1<w<21),m(1<m<10001),n(1<n<10001),且 m 不等于n。三个正整数之间以一个空格隔开,输出m 到n的最短路线经过几个楼。
【输入描述】
在一行输入三个正整数 w,m,n,三个正整数之间以一个空格隔开
【输出描述】
输出 m 到 n 的最短路线经过几个楼
【输入样例】

6 8 2

【输出样例】

4

答案:
参考代码一:

#include <cmath>
#include <iostream>using namespace std;
int main() {int w, m, n;cin >> w >> m >> n;int x1, y1, x2, y2;x1 = (m - 1) / w + 1;y1 = (m - 1) % w + 1;if (x1 % 2 == 0) {y1 = w + 1 - y1;}x2 = (n - 1) / w + 1;y2 = (n - 1) % w + 1;if (x2 % 2 == 0) {y2 = w + 1 - y2;}int ans = abs(x1 - x2) + abs(y1 - y2);cout << ans << endl;return 0;
}

参考代码二:

#include <bits/stdc++.h>
using namespace std;
int n, m, w, a[1011][1011], s1, t1, s2, t2;
int main() {cin >> w >> n >> m;int x = 1, y = 1, f = 0;if (n > m)swap(n, m);for (int i = 1; i <= m; i++) {a[x][y] = i;if (i == n)s1 = x, t1 = y;if (i == m)s2 = x, t2 = y;if (f == 0)y++;elsey--;if (y > w) {x++;y = w;f = 1;}if (y < 1) {x++;y = 1;f = 0;}}cout << abs(s2 - s1) + abs(t2 - t1);return 0;
}

本题重点考察题目分析和理解。我们需要计算出 m、n 号楼在第几行第几列,行、列的差相加,得到最终的结果。
例如,w=6,m=8,n=2,可以算得8号楼所在行x1=(m-1)/w+1=(8-1)16+1=2,2号楼所在行x2=(n-1)/w+1=(2-1)16+1=1:
所在列的情况比较复杂,涉及反向的问题,其中奇数行的列号从左往右依次增大,偶数行的列号从左往右依次减小,我们可以先按照从左往右依次增大的情况,算出y1=(m-1)%w+1=(8-1)%6+1=2,y2=(n-1)%w+1=(2-1)%6+1=2:
其中,2号楼在奇数行,y2=2即为所在列,8号楼在偶数行,方向相反,y1=w+1-y1=6+1-2=5,8号楼在第5列。
经过的楼数为 abs(x1-x2)+abs(y1-y2)=abs(2-1)+ abs(5-2)= 4.
将如上过程编写为程序,输出即可。

第5题:组合

【题目描述】
输入两个正整数 n 和 m(20 >= m >= n > 0),n 代表正整数的个数,要求 n 个正整数相加的和为 m,输出满足这个条件的正整数组合有多少。
例如:当 n=4,m=8 时,满足条件的有 5 组(也就是:5+1+1+1=8,4+2+1+1=8,3+3+1+1=8,3+2+2+1=8,2+2+2+2=8,每组组合都由 4 个正整数组成且 4 个正整数的和等于 8)
【输入描述】
分行输入 n 和 m(20>=m>=n>0)
【输出描述】
输出满足这个条件的正整数组合有多少
【输入样例】

4
8

【输出样例】

5

答案:
参考代码一:

#include <iostream>
using namespace std;
int n, m, sum = 0, ans = 0;
int a[25];
void dfs(int p) {if (p > n) {if (sum == m) {ans++;}return;}for (int i = a[p - 1]; i <= m - sum; i++) {sum += i;a[p] = i;dfs(p + 1);sum -= i;a[p] = 0;}
}
int main() {cin >> n >> m;a[0] = 1;dfs(1);cout << ans << endl;return 0;
}

参考代码二:

#include <bits/stdc++.h>
using namespace std;
int n, m, a[110], ans;
void dfs(int dps, int sum) {if (sum > m)return;if (dps > n) {if (sum == m)ans++;} else {for (int i = 1; i <= m; i++) {if (i >= a[dps - 1]) {a[dps] = i;dfs(dps + 1, sum + i);a[dps] = 0;}}}return;
}
int main() {cin >> n >> m;dfs(1, 0);cout << ans;return 0;
}

做法1使用递归回溯法,设数组 a[25],a[p] 表示式子中的第 p 个加数。
设初始值 a[0]= 1,依次递归枚举 a[1]~ a[n],为了避免重复枚举,a[p]的枚举范围为 a[p-1]~(m- sum)。
计算 a[1] ~ a[n] 总和 sum,如果 sum == m,则个数 ans++。
递归结束,输出符合条件的个数 ans。

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

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

相关文章

LIP模型动力学方程例子

线性倒立摆(Linear Inverted Pendulum, LIP)模型是用于描述和控制人形机器人步态的重要工具。LIP模型假设质心沿着一条固定的直线运动,并且所有质量集中在质心上。这简化了计算,使得模型更容易用于控制和稳定分析。 LIP模型动力学方程 LIP模型的基本假设是: 机器人的质心…

【病理数据】svs格式数据解读

Openslide 病理图像通常以.svs格式存储在数据库中。要想使用python处理svs格式的图像&#xff0c;我们通常使用Openslide模块。 关于Openslide模块的安装详见这个博客&#xff1a; 【解决Error】ModuleNotFoundError: No module named ‘openslide‘ 病理图像数据结构 病理图…

Latex中表格(3)

Latex中的表格 一、多行或多列单元格 这篇主要说Latex中表格出现多行或者多列单元格的形式. 一、多行或多列单元格 可能用到的宏包 \usepackage{booktabs}\usepackage{multirow} 代码&#xff1a; \begin{table}[h!] \centering \caption{Your caption here} \begin{tabul…

【iOS】UI——关于UIAlertController类(警告对话框)

目录 前言关于UIAlertController具体操作及代码实现总结 前言 在UI的警告对话框的学习中&#xff0c;我们发现UIAlertView在iOS 9中已经被废弃&#xff0c;我们找到UIAlertController来代替UIAlertView实现弹出框的功能&#xff0c;从而有了这篇关于UIAlertController的学习笔记…

Nextjs学习教程

一.手动创建项目 建议看这个中文网站文档,这个里面的案例配置都是手动的,也可以往下看我这个博客一步步操作 1.在目录下执行下面命令,初始化package.json文件 npm init -y2.安装react相关包以及next包 yarn add next react react-dom // 或者 npm install --save next react…

k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)

故障信息 pod一直处于创建中 查看pod详细信息显示 kubectl describe pod 容器id文字 Events: Type Reason Age From Message Normal Scheduled 5m30s default-scheduler Successfully assigned default/nginx-server2-f97c6b9d5-d6dsp to worker02 Warning FailedCreatePod…

C语言之字符函数总结(全部!),一篇记住所有的字符函数

前言 还在担心关于字符的库函数记不住吗&#xff1f;不用担心&#xff0c;这篇文章将为你全面整理所有的字符函数的用法。不用记忆&#xff0c;一次看完&#xff0c;随查随用。用多了自然就记住了 字符分类函数和字符转换函数 C语言中有一系列的函数是专门做字符分类和字符转换…

XML解析库tinyxml2库使用详解

XML语法规则介绍及总结-CSDN博客 TinyXML-2 是一个简单轻量级的 C XML 解析库,它提供了一种快速、高效地解析 XML 文档的方式。 1. 下载地址 Gitee 极速下载/tinyxml2 2. 基本用法 下面将详细介绍 TinyXML-2 的主要使用方法: 2.1. 引入头文件和命名空间 #i…

Acrobat Pro DC 2023 for Mac/Win:全平台PDF编辑器的终极解决方案

对于需要处理PDF文档的个人和企业用户来说&#xff0c;Adobe Acrobat Pro DC 2023是一款不可或缺的工具。作为全球领先的PDF编辑器&#xff0c;Acrobat Pro DC 2023在Mac和Windows平台上提供了丰富的功能和令人印象深刻的性能&#xff0c;使其成为用户编辑、转换和管理PDF文档的…

Vue09-事件处理

一、一个简单的示例 v-on&#xff1a;当xxx的时候。 二、事件处理 2-1、参数说明 <div id"root"><h1>你好呀&#xff0c;{{name}}</h1><button v-on:click"showinfo">点击我</button></div><script>new Vue({e…

像素着色技术在AI绘画中的革新作用

摘要&#xff1a;随着人工智能技术的不断进步&#xff0c;AI绘画已成为艺术和技术领域中的一个热门话题。本文将探讨像素着色技术在AI绘画中的应用及其对创作过程的影响&#xff0c;揭示这一技术如何推动艺术创作的革新。 引言&#xff1a; 传统的绘画方法要求艺术家具备高超的…

堆排序-调整算法

个人主页点这里!~ 1.堆 了解堆排序首先要了解一下堆这个数据结构 堆&#xff08;Heap&#xff09;是一种特殊的树形数据结构&#xff0c;它通常被表示为一个完全二叉树或近似完全二叉树&#xff0c;并且满足堆性质&#xff08;Heap Property&#xff09;。堆主要分为两种&…

【web前端开发】标签(基础知识详解)

浏览器能识别的标签 编码 <meta charset"UTF-8"> title <title>helloshh</title> 标题 <h1>1级标签</h1> <h2>2级标签</h2> <h3>3级标签</h3> <h4>4级标签</h4> <h5>5级标签</h5> &…

突发!凌晨4点某制造业大厂国产数据库集群故障...

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

vivado DIAGRAM、HW_AXI

图表 描述 块设计&#xff08;.bd&#xff09;是在IP中创建的互连IP核的复杂系统 Vivado设计套件的集成商。Vivado IP集成器可让您创建复杂的 通过实例化和互连Vivado IP目录中的IP进行系统设计。一块 设计是一种分层设计&#xff0c;可以写入磁盘上的文件&#xff08;.bd&…

AI绘画中的图像格式技术

在数字艺术的广阔天地里&#xff0c;AI绘画作为一种新兴的艺术形式&#xff0c;正在逐渐占据一席之地。不同于传统绘画&#xff0c;AI绘画依赖于复杂的算法和机器学习模型来生成图像&#xff0c;而这一切的背后&#xff0c;图像格式技术发挥着至关重要的作用。图像格式不仅关系…

量化视频1---qmt实盘交易链接,提供源代码

量化视频1---qmt实盘交易链接&#xff0c;提供源代码 量化视频1---qmt实盘交易链接&#xff0c;提供源代码 (qq.com) 源代码 from qmt_trader.qmt_trader import qmt_tradertraderqmt_trader(path rD:/国金QMT交易端模拟/userdata_mini, session_id 123456…

CTF Show MISC做题笔记

MISCX 30 题目压缩包为misc2.rar,其中包含三个文件:misc1.zip, flag.txt, hint.txt。其中后两个文件是加密的。 先解压出misc1.zip, 发现其中包含两个文件&#xff1a;misc.png和music.doc。其中后面文件是加密的。 解压出misc.png,发现图片尾部有消息&#xff1a;flag{flag…

最新区块链论文速读--CCF A会议 CCS 2023 共25篇 附pdf下载(2/4)

Conference&#xff1a;ACM Conference on Computer and Communications Security (CCS) CCF level&#xff1a;CCF A Categories&#xff1a;network and information security Year&#xff1a;2023 Num&#xff1a;25 第1~7篇区块链文章请点击此处查看上篇 8 Title: P…

【C/C++】IO流

目录 前言&#xff1a; 一&#xff0c;C语言的I/O流 二&#xff0c;C的I/O流 2-1&#xff0c;C标准IO流 2-2&#xff0c;IO流的连续输入 前言&#xff1a; “流”即是流动的意思&#xff0c;是物质从一处向另一处流动的过程&#xff0c;是对一种有序连续且具有方向性的数据…