文章目录
前言
本篇文章灵感来源于 第十三届蓝桥杯省赛C++B组第六题修剪灌木,我的方法是老老实实地走完这个流程得到答案
题目描述
爱丽丝要完成一项修剪灌木的工作。
有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木,让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复
灌木每天从早上到傍晩会长高 1 厘米,而其余时间不会长高。在第一天的 早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高
输入格式
一个正整数 N, 含义如题面所述
输出格式
输出 N 行,每行一个整数,第 i 行表示从左到右第 i 棵树最高能长到多高
样例输入
3
样例输出
4
2
4
一、数组的往返是什么?
我们把灌木看成数组的元素,爱丽丝修剪的过程就是数组的来回遍历
我称之为数组的往返
二、实现
1.具体代码
以下是题解中修剪灌木的函数 Shrub_cut 也是来回遍历数组的实现,来回遍历次数可以通过改变i控制,其中N为灌木数量,文章最后我会给出
void Shrub_cut(int* Shrub, int i, int N)
{
// 计算当前方向
int direction = (i / N) % 2; // 0为向右,1为向左
int index;
// 根据当前方向决定修剪的灌木索引
if (direction == 0) // 向右修剪
{
index = i % N; // 从0到N-1循环
}
else // 向左修剪
{
index = N - 1 - (i % N); // 从N-1到0循环
}
// 修剪当前索引的灌木
Shrub[index] = 0; // 将灌木高度设为0
}
2.完整题解代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Shrub_grow(int* Shrub, int N)//灌木生长
{
for (int i = 0; i < N; i++)
{
Shrub[i] += 1;
}
}
void Shrub_cut(int* Shrub, int i, int N)//灌木修剪
{
// 计算当前方向
int direction = (i / N) % 2; // 0为向右,1为向左
int index;
// 根据当前方向决定修剪的灌木索引
if (direction == 0) // 向右修剪
{
index = i % N; // 从0到N-1循环
}
else // 向左修剪
{
index = N - 1 - (i % N); // 从N-1到0循环
}
// 修剪当前索引的灌木
Shrub[index] = 0; // 将灌木高度设为0
}
void Shrub_highest(int* Shrub, int* outcome, int N)//用outcome数组存放每棵灌木最大高度
{
for (int i = 0; i < N; i++)
{
outcome[i] = (outcome[i] > Shrub[i]) ? outcome[i] : Shrub[i];//更新结果
}
}
int main()
{
int N;//灌木数量
scanf("%d", &N);
int Shrub[10001] = { 0 };//灌木实时高度数组
int outcome[10001] = { 0 };//灌木最大高度数组
for (int i = 0; i < 3*N; i++)
{
Shrub_grow(Shrub, N);
//Shrub_highest(Shrub, outcome, N);//这里我的理解是生长之后记录最大高度,结果是错的
Shrub_cut(Shrub, i, N);
Shrub_highest(Shrub, outcome, N);//先修剪再检查
}
for (int i = 0; i < N; i++)
{
printf("%d\n", outcome[i]);//打印结果
}
return 0;
}
总结以及一些疑问
以上就是全部内容,简单介绍了C语言中数组的来回遍历以及在题目中的运用
我还有一个疑问就是
for (int i = 0; i < 3*N; i++)
{
Shrub_grow(Shrub, N);
Shrub_cut(Shrub, i, N);
Shrub_highest(Shrub, outcome, N);//先修剪再检查
}
这个for循环的次数为什么是3N,可不可以是其他更小的次数?
标签:修剪,遍历,Shrub,int,灌木,C语言,数组,outcome From: https://blog.csdn.net/vo1d_code/article/details/143109667