文章目录
💥前言
☀️大家好☀️,我是烧蔬菜😁,最近做算法题可以感受到自己确实有点懈怠了😐,所以给自己定一个百日刷题计划,希望自己可以一直坚持下去💪,每天做题,也把题题解写下,记录自己每天的做题痕迹来激励提升自己获取正反馈✊,并且与大家分享下去😁
😉解题报告
💥一、[NOIP2005 普及组] 陶陶摘苹果
☘️ 题目描述☘️
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 10 10 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30 30 30 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知 10 10 10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式
输入包括两行数据。第一行包含 10 10 10 个 100 100 100 到 200 200 200 之间(包括 100 100 100 和 200 200 200 )的整数(以厘米为单位)分别表示 10 10 10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个 100 100 100 到 120 120 120 之间(包含 100 100 100 和 120 120 120 )的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式
输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
样例 1
样例输入 1
100 200 150 140 129 134 167 198 200 111
110
样例输出 1
5
🤔一、思路:
(1)十个苹果的高度用一个数组存储;
(2)
f
o
r
for
for循环中对比每个苹果与陶陶和凳子的总高度,可以摘到进行记录;
😎二、源码:
#include <iostream>
using namespace std;
int apple[10]; //(1)
int stool = 30;
int height;
int ret = 0;
int main() {
for (int i = 0; i < 10; i++) cin >> apple[i];
cin >> height;
height += stool;
for (int i = 0; i < 10; i++) {
if (height >= apple[i]) { //(2)
ret++;
}
}
cout << ret;
return 0;
}
😮三、代码分析:
(1)存储苹果高度
(2)可以摘到的苹果进行计数
💥二、[NOIP2005 普及组] 校门外的树
☘️ 题目描述☘️
某校大门外长度为 l l l 的马路上有一排树,每两棵相邻的树之间的间隔都是 1 1 1 米。我们可以把马路看成一个数轴,马路的一端在数轴 0 0 0的位置,另一端在 l l l的位置;数轴上的每个整数点,即 0 , 1 , 2 , … , l 0,1,2,\dots,l 0,1,2,…,l,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入格式
第一行有两个整数,分别表示马路的长度 l l l 和区域的数目 m m m。
接下来 m m m行,每行两个整数 u , v u, v u,v,表示一个区域的起始点和终止点的坐标。
输出格式
输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。
样例 1
样例输入 1500 3 150 300 100 200 470 471
样例输出 1
298
🤔一、思路:
(1)要计算移走区域内树之后,马路上还剩多少树,重点是区域之间可能会有重复;
(2)所以,我们先把所有的树放入一个数组内,把要会移走的树进行标记,没标记的就是剩下的树
😎二、源码:
#include <iostream>
#include <cstring>
using namespace std;
const int N = 10010;
int read;
int area;
int tree[N];
int head, tail;
int cnt = 0;
int remain;
int main() {
cin >> read >> area;
// memset(tree, 0, sizeof(tree)); 数组为全局变量时,自动赋值为零,不需要初始化
for (int i = 0; i < area; i++) {
cin >> head >> tail;
for (int j = head; j <= tail; j++) {
if (tree[j] == 0) { //(1)
cnt++;
tree[j] = 1;
}
}
}
remain = read - cnt + 1; //(2)
cout << remain;
return 0;
}
😮三、代码分析:
(1)在区域内,若该树没有移走,则对该树进行标记,为已经移走的树
(2)剩余的树
💥三、小鱼的数字游戏
☘️ 题目描述☘️
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a i a_i ai(长度不一定,以 0 0 0 结束),记住了然后反着念出来(表示结束的数字 0 0 0 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入格式
一行内输入一串整数,以 0 0 0 结束,以空格间隔。
输出格式
一行内倒着输出这一串整数,以空格间隔。
样例 1
样例输入 1
3 65 23 5 34 1 30 0
样例输出 1
30 1 34 5 23 65 3
🤔一、思路:
(1)将数字输入一个数组内
(2)将数组内数字,除
0
0
0外倒过来输出
😎二、源码:
#include <iostream>
using namespace std;
int nums[110];
int i;
int main() {
for (i = 0; ; i++) { //(1)
cin >> nums[i];
if (nums[i] == 0) break;
}
for (int j = i - 1; j >= 0; j--) { //(2)
cout << nums[j] << " ";
}
return 0;
}
😮三、代码分析:
(1)构建数组,遇
0
0
0退出
(2)倒过来输出,除
0
0
0以外的数
🤗 鸡汤来咯:
既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。