问题描述
爱丽丝要完成一项修剪灌木的工作。
有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晩会长高 1 厘米, 而其余时间不会长高。在第一天的 早晨, 所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
输入格式
一个正整数 N, 含义如题面所述。
输出格式
输出 N行, 每行一个整数, 第 i行表示从左到右第 i 棵树最高能长到多高。
样例输入
3
样例输出
4
2
4
因为树木都是在傍晚修剪,所以树木在修剪前已经长了一厘米,这个是我们要注意的。
所以树木共有三个时间段生长 :(设n为树木棵树,i为第几棵树)
1、在第一轮开始修剪也就是从左向右修剪时,这期间的天数就是该灌木在这个时间间隔内能长到的高度。也就是 i;下图可助理解
2、.一个是从左向右修剪过该灌木后继续向右然后调转方向向左,到再次修剪到该灌木的这一天。这期间的天数就是该灌木在这个时间间隔内能长到的高度。也就是2*(n-i)。下图可验证
3、一个是从右向左修剪过该灌木后继续向左然后调转方向向右,到再次修剪到该灌木的这一天。这期间的天数就是该灌木在这个时间间隔内能长到的高度。也就是2*(i-1);下图可验证
则最高高度就是在这三个高度里面选择大值;
#includeint main()
{
int i,a,b;
scanf("%d",&a);
for(i=1;i<=a;i++){
printf("%d\n",N(i,2*(a-i),2*(i-1)));
}
return 0;
}
int N(int b,int c,int d){
if(b>d){
if(b>c){
return b;
}
else{
return c;
}
}
else{
if(c>d){
return c;
}
else{
return d;
}
}
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款