问题描述
爱丽丝要完成一项修剪灌木的工作。
有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晩会长高 1 厘米, 而其余时间不会长高。在第一天的早晨, 所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
输入格式
一个正整数 N, 含义如题面所述。
输出格式
输出 N 行, 每行一个整数, 第 i 行表示从左到右第 i 棵树最高能长到多高。
样例输入
3
样例输出
4
2
4
评测用例规模与约定
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
总通过次数: 19054 | 总提交次数: 20268 | 通过率: 94%
难度: 中等 标签: 2022, 思维, 省赛
代码:
#include <iostream>
using namespace std;
int main() {
int n, i;
// 从标准输入读取一个整数 n
scanf("%d", &n);
// 声明一个整型数组 a,数组大小为 n
int a[n];
// 循环从0到n-1,计算并存储对应的值到数组 a 中,并输出每个元素的值
for(i = 0; i < n; i++) {
// 计算 a[i] 的值,其中 max 函数用于计算 i 和 n-i-1 的最大值
a[i] = 2 * max(i, n - i - 1);
// 输出 a[i] 的值,每个值占一行
printf("%d\n", a[i]);
}
return 0;
}
详细解释:
-
输入:
- 从标准输入读取一个正整数
n
,表示灌木的数量。
-
数组声明:
- 声明一个大小为
n
的整型数组a
,用于存储每棵灌木最高长到的高度。
-
计算和输出:
- 使用
for
循环遍历数组a
,索引i
从0
到n-1
。 - 对于每棵灌木,根据题目要求使用公式
2 * max(i, n - i - 1)
计算其最高可能的高度。 max(i, n - i - 1)
表示取i
和n-i-1
中较大的值,这个值乘以2
就是当前灌木的最高高度。- 使用
printf
函数输出每个计算得到的高度,每个高度占一行。
-
返回值:
main
函数返回0
,表示程序正常执行结束。