文章目录
- 一、前言
- 二、问题
- 问题:玫瑰花地的面积
- 问题:判断三角形
- 问题:汤姆的日记
- 问题:正方形的数量
- 问题:字符操作
- 问题:猴子摘桃
- 三、感谢
一、前言
本章节主要对2024年信息素养大赛算法创意实践挑战复赛小学组题目进行讲解。
二、问题
问题:玫瑰花地的面积
类型:整数运算
题目描述:
在一个宁静的小镇上,有位园丁想为她的玫瑰花地建围栏。这片花地是个长方形,长度 10米,宽度 5米。但园丁不知道怎么计算玫瑰花地的面积,于是他向小兔子求助。聪明的小兔子告诉园丁:"要计算长方形的面积,只需将长度乘以宽度。于是,园丁算出玫瑰花地的面积是 50 平方米。现在园丁又开辟了一块玫瑰花地,形状也是规则的长方形,园丁通过上面的方法计算出玫瑰花地的面积。
输入:
一行,两个正整数a,b,中间用空格隔开,分别代表长方形的长和宽。(0<a,b<10000)
输出:
一行,一个正整数,代表玫瑰花地的面积。
样例1:
输入:
1 1
输出:
1
样例2:
输入:
10 5
输出:
50
1.分析问题
- 已知:长方形的长和宽。
- 未知:玫瑰花地的面积。
- 关系:长方形的面积 = 长方形的长 * 长方形的宽。
2.定义变量
- 定义了三个整型变量,其中l代表长度(length),w代表宽度(width),s代表面积(area)。
int l,w,s;
3.输入数据
- 通过cin从标准输入(通常是键盘)读取长和宽的值,并分别存储到变量l和w中。
cin>>l>>w;
4.数据计算
- 根据长方形面积的计算公式,将长l与宽w相乘的结果赋值给面积变量s。
s=l*w;
5.输出结果
- 使用cout将计算得到的面积s输出到标准输出(通常是显示器)。
cout<<s;
完整代码如下:
#include<bits/stdc++.h> // 包含C++的标准库头文件,提供常用的数据结构和函数
using namespace std; // 使用std命名空间,这样可以直接调用std中的函数和对象,如cout, cin等int main(){ // 定义主函数,程序的执行从这里开始// 一、分析问题// 已知:长方形的长和宽。// 未知:玫瑰花地的面积。// 关系: 长方形的面积 = 长方形的长 * 长方形的宽。int l, w, s; // 定义变量// l 代表长度 (length)// w 代表宽度 (width)// s 代表面积 (area)// 二、输入已知cin >> l >> w; // 从用户输入中读取长(l)和宽(w)的值// 三、根据关系计算s = l * w; // 计算长方形(玫瑰花地)的面积,将结果存储在变量s中// 四、输出未知cout << s; // 输出计算得到的面积到屏幕上return 0; // 主函数结束,返回0表示程序执行成功
}
问题:判断三角形
类型:多分支语句
题目描述:
在一个小镇上,有一位名叫艾米的小女孩,她非常喜欢观察各种形状。一天,她在公园里发现了一块奇特的三角形玻璃。这块玻璃不仅外形完美,还能反射出七彩的光芒。艾米觉得这块玻璃一定有神秘的力量,于是她把它带回家仔细研究。几天后,艾米发现这块三角形玻璃可以用来聚焦阳光,点燃火柴。这个发现让她惊喜不已,也激发了她对科学的浓厚兴趣。
现在艾米想知道这块三角形玻璃的形状:
①如果三角形的三条边都相等,那么这个三角形是等边三角形;
②如果三角形中有两条边的长度相等,那么这个三角形是等腰三角形;
③如果三角形的一条边长的平方等于另外两条边长的平方和,那么这个三角形是直角三角形。
输入三角形的三边长度,判断该三角形是等腰三角形、直角三角形还是等边三角形。(输入数据保证能构成三角形)。
如果是等腰三角形,输出"Isosceles glass”;
如果是等边三角形,输出"Equilateral glass”
如果是直角三角形,输出"Right angle glass”
如果三者都不是,输出"None”。
输入:
输入只有一行,三个正整数,代表三角形的三条边长,之间用空格隔开。
输出:
输出只有一行,一个字符串。
样例1:
输入:
1001 1001 1
输出:
Isosceles glass
样例2:
输入:
3 4 5
输出:
Right angle glass
样例3:
输入:
5 7 8
输出:
None
1.分析问题
-
已知:三角形的三边长度;(输入数据保证能构成三角形)。
-
未知:判断该三角形是等腰三角形、直角三角形还是等边三角形;
- 如果是等腰三角形,输出"Isosceles glass”;
- 如果是等边三角形,输出"Equilateral glass”;
- 如果是直角三角形,输出"Right angle glass”;
- 如果三者都不是,输出"None”。
-
关系:
- 如果三角形的三条边都相等,那么这个三角形是等边三角形;
- 如果三角形中有两条边的长度相等,那么这个三角形是等腰三角形;
- 如果三角形的一条边长的平方等于另外两条边长的平方和,那么这个三角形是直角三角形。
2.定义变量
- 定义了三个整型变量a、b、c分别存储三角形的三边长度。
//二、定义变量(已知、未知、关系) int a,b,c;
3.输入数据
- 通过cin接收用户输入的三角形三边长度。
//三、输入已知cin>>a>>b>>c;
4.数据计算
- 如果三边相等(等边三角形),输出"Equilateral glass"。
- 如果有两边相等(等腰三角形),输出"Isosceles glass"。
- 如果满足勾股定理(直角三角形),输出"Right angle glass"。
- 如果以上条件都不满足,输出"None"。
//四、根据关系计算if(a==b&&b==c){//五、输出未知 cout<<"Equilateral glass";}else if(a==b||a==c||b==c){//五、输出未知 cout<<"Isosceles glass";}else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){//五、输出未知 cout<<"Right angle glass";}else{//五、输出未知 cout<<"None";}
5.输出结果
已完成。
完整代码如下:
#include <bits/stdc++.h> // 引入所有标准库头文件,方便使用各种功能
using namespace std; // 使用std命名空间,减少代码中的前缀使用int main() {// 一、分析问题// 已知:三角形的三边长度(确保能构成三角形)。// 目标:判断三角形类型并输出:// - 等边三角形:"Equilateral glass"// - 等腰三角形:"Isosceles glass"// - 直角三角形:"Right angle glass"// - 其他情况:"None"// 二、定义变量int a, b, c; // 分别存储三角形三边的长度// 三、输入处理// 从用户处获取三角形的三边长度cin >> a >> b >> c;// 四、逻辑判断// 根据三角形边长特性进行分类if (a == b && b == c) { // 所有边相等,为等边三角形cout << "Equilateral glass"; // 输出等边三角形信息} else if (a == b || a == c || b == c) { // 有两边相等,为等腰三角形cout << "Isosceles glass"; // 输出等腰三角形信息} else if (a * a + b * b == c * c || // 检查两较小边的平方和是否等于最长边的平方a * a + c * c == b * b || b * b + c * c == a * a) { // 满足勾股定理,为直角三角形cout << "Right angle glass"; // 输出直角三角形信息} else { // 上述条件都不满足,为普通三角形cout << "None"; // 输出"None"}return 0; // 程序执行完毕,返回0表示成功
}
问题:汤姆的日记
类型:数组基础
题目描述:
小男孩汤姆在家里的旧柜子里发现了一本古老的日记。日记中记录了一个失落王国的秘密和一条通往宝藏的路径。好奇心驱使他按照日记的指引,找到了一扇隐藏在树林深处的石门。打开石门后,他进入了一个神秘的地下世界,里面充满了奇珍异宝。回到家后,汤姆把日记放回柜子,从此期待每一次新的探索与发现。小男孩汤姆家的柜子是一个长方体,由很多小柜子组成。汤姆一共有 n 次操作,分为两种类型:
【第一种类型】M i j k:汤姆往第 i行第 j列的柜子里存入日记,并在日记上面写下编号k。
【第二种类型】N i j:汤姆取出第 i 行第 j列柜子里的日记,输出日记的编号(保证取出的柜子里有日记)。
保证行数1<=i<= 1000, 列数1<=j<= 1000,编号1<=K<=10000。
输入:
输入一共 n+1 行:第一行只有一个整数 n,表示操作次数;接下来 n行,每行表示一次操作,M代表第一种类型,N代表第二种类型,具体操作如题目描述所示。
输出:
对于每次查询操作,输出答案,以换行符隔开。
样例1:
输入:
2
M 2 3 4
N 2 3
输出:
4
样例2:
输入:
4
M 3 1000 1101
M 1 1 1
N 3 1000
N 1 1
输出:
1101
1
1.分析问题
- 已知:操作次数n, ;接下来 n行,每行表示一次操作,M代表第一种类型,N代表第二种类型
- 未知:每次查询操作,输出答案,以换行符隔开。
- 关系:保证行数1<=i<= 1000, 列数1<=j<= 1000,编号1<=K<=10000。
- 【第一种类型】M i j k:汤姆往第 i行第 j列的柜子里存入日记,并在日记上面写下编号k。
- 【第二种类型】N i j:汤姆取出第 i行第 j列柜子里的日记,输出日记的编号(保证取出的柜子里有日记)。
2.定义变量
- 定义了一个静态数组a[1001][1001],用于模拟1000x1000的柜子矩阵。
int a[1001][1001];
- 定义变量,n为操作总数,i、j为柜子的位置坐标,k为日记编号。
- 定义变量c,用于存储操作类型(M或N)。
//二、定义变量(已知、未知、关系) int n,i,j,k;char c;
3.输入数据
- 首先读取操作次数n,然后进入循环,每次循环读取一个操作类型(用字符M或N表示)、行号i和列号j。
//三、输入已知cin>>n;for(int t=0;t<n;t++){cin>>c>>i>>j;}
4.数据计算
- 如果操作类型为M,进一步读取日记编号k,并将其存入数组a[i][j]对应的位置。
//四、根据关系计算if(c=='M') {cin>>k;a[i][j]=k;}else{}
5.输出结果
- 如果操作类型为N(代码中通过else分支隐式判断),直接输出数组a[i][j]中存储的日记编号
//五、输出未知 cout<<a[i][j]<<"\n";
完整代码如下:
#include <bits/stdc++.h> // 包含C++标准库的所有常用头文件,以简化代码编写
using namespace std; // 使用std命名空间,使得可以直接调用std中的函数和对象,无需前缀int a[1001][1001]; // 定义一个1001x1001的整型数组a,用于存储柜子中日记的编号,数组下标0未使用,实际有效范围为1到1000int main() { // 程序的主入口函数// 问题描述:// 汤姆进行n次操作,操作包括存入日记(M)和取出日记(N),需根据操作输出结果。// 操作M: M i j k,表示在第i行第j列的柜子存入编号为k的日记。// 操作N: N i j,表示取出第i行第j列柜子的日记,并输出其编号。int n, i, j, k; // 定义变量,n为操作总数,i、j为柜子的位置坐标,k为日记编号char c; // 定义变量c,用于存储操作类型(M或N)// 输入操作总数ncin >> n;for(int t = 0; t < n; t++) { // 循环处理n次操作cin >> c >> i >> j; // 读取当前操作类型及柜子位置坐标// 根据操作类型执行相应操作if(c == 'M') { // 存储日记操作cin >> k; // 读取要存入的日记编号a[i][j] = k; // 将日记编号k存储到数组a的对应位置,表示存入日记} else { // 取出日记操作(此处默认c为'N',因为只有M和N两种操作)cout << a[i][j] << "\n"; // 输出指定位置柜子中的日记编号,假设柜子中必定有日记可取}}return 0; // 主函数正常结束,返回0表示程序执行成功
}
问题:正方形的数量
类型:推导、有规律的循环
题目描述:
在一个神奇的王国里,有一块n行m列的格子地板。每个格子都是一个正方形,里面藏着一个秘密。小男孩阿力得到了一张古老的地图,上面标注了这些格子的谜题和宝藏。每天放学后,阿力都会来到这片地板上解开一个新的谜题。有时是数学问题,有时是历史故事,还有时是自然现象。随着他不断探索,他不仅找到了许多宝藏,还学到了无数知识。最终,阿力成为了村里最聪明的小孩,而那片格子地板也成了他心中永远的冒险乐园。阿力想知道格子地板里包含多少个正方形,他需要想出一个高效的办法。
输入:
输入只有一行,两个整数n m,中间用空格隔开,代表格子地板大小为n行m列。保证 n和 m 均为不超过 100 的正整数。
输出:
输出只有一行,一个整数,代表格子地板里包含多少个正方形。
样例:
输入:
2 4
输出:
11
解题思路:
对于一个n行m列的格子地板,可以存在多种不同边长的正方形。这些正方形的边长可以从1到地板的最小维度(即min(n, m)),因为正方形的边长不可能超过地板的短边长度。
基本思路:
-
理解正方形的形成
正方形是由等长的四条边组成的图形。在格子地板上,一个正方形意味着连续的行和列上都有相同数量的格子被占据,形成一个矩形,且这个矩形的长和宽相等。 -
确定正方形的边长
正方形的边长l可以从1开始,一直到min(n,m)。这是因为如果边长超过n或m,那么它就无法在格子地板上完全放下。 -
计算边长为l的正方形数量
比如一个n行m列的网格,这里我将使用一个较小的网格尺寸以便于说明,比如说n=5行,m=6列。
1x1 正方形
-
对于1x1的正方形,因为它只占用一个单位格,所以可以在网格中的任意位置放置。这意味着:
- 沿着行方向,可以从第1行到第5行放置,共有5个位置。
- 沿着列方向,可以从第1列到第6列放置,共有6个位置。
2x2 正方形
- 当考虑2x2的正方形时,它需要连续的2行和2列来放置。
-
沿行方向,第一个2x2正方形可以从第1行开始放置,最后一个可以从第4行(即5-2+1=4)开始,因此有4个可能的起始行位置。
沿列方向,第一个2x2正方形可以从第1列开始放置,最后一个可以从第5列(即6-2+1=5)开始,因此有5个可能的起始列位置。
3x3 正方形
- 对于3x3的正方形,情况类似但进一步受限。
沿行方向,第一个3x3正方形可以从第1行开始,但最后一个只能从第3行(即5-3+1=3)开始,因此有3个可能的起始行位置。
沿列方向,从第1列开始,最后一个3x3正方形可以放在第4列(即6-3+1=4),因此有4个可能的起始列位置。
在行上的位置:从第一行开始,我们可以放下边长为l的正方形的最上面一行。然后,我们可以向下移动这个正方形,直到它的最下面一行不超过第n行。因此,在行上,我们有n−l+1个可能的位置来放下正方形的顶部。
在列上的位置:与行类似,从第一列开始,我们可以放下边长为l的正方形的最左边一列。然后,我们可以向右移动这个正方形,直到它的最右边一列不超过第m列。因此,在列上,我们有m−l+1个可能的位置来放下正方形的左侧。
- 乘法原理
由于正方形的位置在行和列上是独立的(即,一个正方形在行上的位置不影响它在列上的位置),我们可以使用乘法原理来计算总的正方形数量。乘法原理告诉我们,如果一件事情可以分成两个连续的阶段,且第一个阶段有a种方法,第二个阶段(在第一个阶段选择之后)有b种方法,那么这件事情总共有a×b种方法。
因此,边长为l的正方形总数为(n−l+1)×(m−l+1)。可以用一个求和公式来表示这个计算过程:
1.分析问题
- 已知:有一块n行m列的格子地板。每个格子都是一个正方形
- 未知:格子地板里包含多少个正方形。
- 关系: 边长为l的正方形的数量可以通过以下公式计算:( n - l + 1 ) * ( m - l + 1)。
2.定义变量
- n为行数,m为列数,mmin为n和m中的较小值,用于确定循环上限。
//二、定义变量(已知、未知、关系) int n,m,mmin;
3.输入数据
- 从标准输入读取格子地板的行数n和列数m。
//三、输入已知cin>>n>>m;
4.数据计算
- 计算n和m中的较小值,决定最大的正方形边长。
- 初始化计数器c,用于累加所有正方形的数量,使用long long防止大数溢出。
- 遍历所有可能的正方形边长l(1到min(n, m))。
- 根据公式累积计算各边长的正方形数量。
//四、根据关系计算mmin=min(n,m);long long c=0;for(int i=1;i<=mmin;i++){c+=(n-i+1)*(m-i+1);}
5.输出结果
- 输出计算得到的总正方形数量。
//五、输出未知 cout<<c;
完整代码如下:
#include<bits/stdc++.h> // 包含所有常用头文件,尽管这样做方便,但实际项目中推荐按需引入头文件以减少编译时间和提高代码可读性。
using namespace std; // 使用标准命名空间std,允许直接调用其中的函数和对象。int main() {// 一、分析问题// 已知:有一块n行m列的格子地板,每个格子为正方形。// 未知:求解这块地板内包含多少个正方形(包括1x1, 2x2, ..., nxm大小的正方形)。// 关系:对于边长为l的正方形,其数量由公式(n-l+1)*(m-l+1)给出,需要累加所有可能的l值直到min(n, m)。// 二、定义变量int n, m, mmin; // n为行数,m为列数,mmin为n和m中的较小值,用于确定循环上限。// 三、输入已知cin >> n >> m; // 从标准输入读取格子地板的行数n和列数m。// 四、根据关系计算mmin = min(n, m); // 计算n和m中的较小值,决定最大的正方形边长。long long c = 0; // 初始化计数器c,用于累加所有正方形的数量,使用long long防止大数溢出。for (int i = 1; i <= mmin; i++) { // 遍历所有可能的正方形边长l(1到min(n, m))。c += (n - i + 1) * (m - i + 1); // 根据公式累积计算各边长的正方形数量。}// 五、输出未知cout << c; // 输出计算得到的总正方形数量。return 0; // 表示程序执行成功结束。
}
问题:字符操作
类型:字符串
题目描述:
从前有一个叫做小 A 的字符串,它住在编程世界的字符村。小 A 喜欢和其他字符交朋友,比如空格、逗号和字母B。有一天,小A遇到了一个神秘的函数,这个函数告诉它,只要加入更多的字符,就能变成更强大的字符串。于是,小A开始了冒险,结识了字符’1’、符号#,甚至还有换行符’\n’。最终,小A成为了一个长长的、有意义的句子,实现了自己的梦想。在这个过程中,小A明白了合作的重要性,也找到了自己在代码中的位置。小A在旅途中遇到了很多字符串 str,随着小A不断的结交朋友,它的长度也逐渐变长,具体有两种变长操作:
F str:前插入。表示在字符串小A前面插入字符串 str。
B str:后插入。表示在字符串小A后面插入字符串 str。
R:表示反转整个字符串。
规定字符串小A的初始模样和每次操作的 str 都不含空格或换行。
请你计算出字符串小A旅途结束后的模样。
输入:
输入共 n+2 行:
第一行,输入一个正整数 n,表示操作次数;
第二行,输入一个字符串 str,表示文档最开始的字符串;
从第三行开始,往下n行,每行表示一个操作。
保证操作次数 1<=n<=1000,字符串小A的初始长度和每次插入的字符串 str 的长度均不大于 100。
输出:
输出只有一行,一个字符串。
样例:
输入:
3
Tom
F ht
B ut
R
输出:
tumoTth
1.分析问题
- 已知:操作次数n, 原始字符串s。
- 未知:输出经过多次操作后的字符串。
- 关系:F str:前插入。表示在字符串小A前面插入字符串 str。B str:后插入。表示在字符串小A后面插入字符串 str。R:表示反转整个字符串。
2.定义变量
- s用于存储当前处理后的字符串,temp用于临时存储插入的字符串。
- c存储每次读取的操作类型。
//二、定义变量(已知、未知、关系) int n;string s,temp;char c;
3.输入数据
- 先读取操作次数n和原始字符串s。
- 随后根据操作次数n,循环读取每个操作及其相关参数。
//三、输入已知cin>>n;cin>>s;for(int i=0;i<n;i++){cin>>c;}
4.数据计算
对于每个操作:
- 如果c==‘F’,读取待插入字符串temp,并将temp插入到s的前面。
- 如果c==‘B’,同样读取temp,但将temp追加到s的末尾。
- 如果c==‘R’,则直接反转字符串s。
//四、根据关系计算if(c=='F'){cin>>temp;s=temp+s;}else if(c=='B'){cin>>temp;s+=temp;} else if(c == 'R') {reverse(s.begin(), s.end());}
5.输出结果
//五、输出未知 cout<<s;
完整代码如下:
#include <bits/stdc++.h> // 包含标准库中的所有常用头文件,简化编程
using namespace std; // 使用std命名空间,可以直接调用std中的函数和对象,无需前缀int main() {// 一、问题分析// 任务:根据一系列操作指令,对原始字符串进行处理,并输出最终结果。// 操作类型:// F str:在字符串前插入str。// B str:在字符串后插入str。// R:反转字符串。int n; // 操作次数string s, temp; // s为当前处理的字符串,temp为临时存储的插入字符串char c; // 存储当前操作的命令字符// 三、输入处理cin >> n; // 读取操作次数cin >> s; // 读取原始字符串// 四、循环执行操作for(int i = 0; i < n; i++) {// 读取当前操作的命令字符cin >> c;// 根据操作类型执行相应操作if(c == 'F') { // 前插入操作cin >> temp; // 读取待插入的字符串s = temp + s; // 将temp插入到s的前面} else if(c == 'B') { // 后插入操作cin >> temp; // 读取待插入的字符串s += temp; // 将temp追加到s的后面} else if(c == 'R') { // 反转字符串操作reverse(s.begin(), s.end()); // 使用reverse函数反转字符串s}}// 五、输出处理后的字符串cout << s << endl; // 输出最终的字符串结果return 0; // 程序执行成功,返回0
}
问题:猴子摘桃
类型:递推、有规律的循环
题目描述:
花果山上有一只猴子,每天都去蟠桃园摘桃子。第一天,猴子只摘了一个桃子:之后两天(第二天和第三天),最子每天都摘两个桃子,之后三天(第四、五、六天),猴子每天都摘三个桃子,之后四天(第七、八、九、十天),猴子每天都四个桃子…这种模式会一直持续下去,因为蟠桃园里的桃子无穷无尽,请计算在前n天里,猴子一共摘了多少个挑子。
输入:
输入只有一行,一个正整数n,表示前n天。(1<=n<=1000)
输出:
输出只有一行,一个正整数,表示前n天猴子一共摘了多少个桃子。
样例:
输入:
6
输出:
14
解题思路:
设置一个变量day,来作为猴子摘桃递增的周期。设置一个变量tao,来作为猴子每个周期摘桃的数量。
并在每个周期结束时更新摘桃子的数量和周期天数,能够准确计算出n天内猴子摘得桃子的总数。
利用了day变量同时作为周期剩余天数和下一个周期的长度指示,简化了周期切换的逻辑。
1.分析问题
- 已知:n天。
- 未知:前n天猴子一共摘了多少个桃子。
- 关系:第一天,猴子只摘了一个桃子:之后两天(第二天和第三天),最子每天都摘两个桃子,之后三天(第四、五、六天),猴子每天都摘三个桃子,之后四天(第七、八、九、十天),猴子每天都四个桃子。
2.定义变量
- n:输入的天数。
- day:当前周期的剩余天数。
- tao:当前周期每天摘桃子的数量。
- s:累计摘桃子的总数,使用long long类型以应对可能的大数情况。
//二、定义变量(已知、未知、关系) int n,day=1,tao=1;long long s=0;
3.输入数据
- 通过cin读取用户输入的天数n。
//三、输入已知cin>>n;
4.数据计算
- 使用for循环遍历每一天。
- 每过一天,累计桃子数s增加当天摘的桃子数tao。
- 更新day,表示当前周期剩余天数减1,当day减至0,表示当前周期结束。
- 当前周期结束时,增加每天摘桃子的数量tao,并重置day为新的周期长度tao。
//四、根据关系计算for(int i=1;i<=n;i++){s+=tao;--day;if(day==0){tao+=1;day=tao;}}
5.输出结果
- 循环结束后,输出累计的桃子总数s。
//五、输出未知 cout<<s;
完整代码如下:
#include<bits/stdc++.h> // 包含C++标准库中的所有常用头文件,方便编程
using namespace std; // 使用std命名空间,可以直接调用std库中的函数和对象,无需加std::前缀int main(){// 一、问题分析// 已知:一个周期性的摘桃模式,持续天数为n。// 未知:在这n天里,猴子总共摘了多少个桃子。// 规律:每一轮周期的摘桃数量递增,第一天摘1个,之后每轮周期比前一轮多摘1个桃子,且每轮周期的持续天数也递增。int n, day = 1, tao = 1; // n为总天数,day为当前周期剩余天数,tao为当前周期每天摘桃数量long long s = 0; // s用于累加每天摘得的桃子总数,使用long long类型以支持大数计算// 三、输入已知cin >> n; // 从用户输入获取总天数n// 四、根据规律计算摘桃总数for(int i = 1; i <= n; i++) { // 遍历n天s += tao; // 当天摘桃数累加到总和中--day; // 当前周期剩余天数减1if(day == 0) { // 当前周期结束tao++; // 下一周期每天摘桃数增加1day = tao; // 新周期的持续天数等于新的摘桃数}}// 五、输出结果cout << s << endl; // 输出n天内猴子总共摘得的桃子数return 0; // 程序正常结束
}
三、感谢
如若本文对您的学习或工作有所启发和帮助,恳请您给予宝贵的支持——轻轻一点,为文章点赞;若觉得内容值得分享给更多朋友,欢迎转发扩散;若认为此篇内容具有长期参考价值,敬请收藏以便随时查阅。
每一次您的点赞、分享与收藏,都是对我持续创作和分享的热情鼓励,也是推动我不断提供更多高质量内容的动力源泉。期待我们在下一篇文章中再次相遇,共同攀登知识的高峰!