【百日刷题计划 第四天】—— 熟悉数组 数组基础题

💥前言

        ☀️大家好☀️,我是烧蔬菜😁,最近做算法题可以感受到自己确实有点懈怠了😐,所以给自己定一个百日刷题计划,希望自己可以一直坚持下去💪,每天做题,也把题题解写下,记录自己每天的做题痕迹来激励提升自己获取正反馈✊,并且与大家分享下去😁

😉解题报告

💥一、[NOIP2005 普及组] 陶陶摘苹果

biu~

☘️ 题目描述☘️

        陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 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 普及组] 校门外的树

biu~

☘️ 题目描述☘️

        某校大门外长度为 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
        样例输入 1

500 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)剩余的树

💥三、小鱼的数字游戏

biu~

☘️ 题目描述☘️

        小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 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以外的数

🤗 鸡汤来咯:

        既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。在这里插入图片描述

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值