1.11 循环结构实例
1.11 循环结构实例
1. 小鱼游泳
【例】有一只小鱼,它平日每天游泳 50 公里,周末休息(实行双休日),假设从周 x(1≤x≤7) 开始算起,过了 n(n≤1e6)天以后,小鱼一共累计游泳了多少公里呢?
输入格式:输入两个整数x,n(表示从周x算起,经过n天)。
输出格式:输出一个整数,表示小鱼累计游泳了多少公里。
输入样例:3 10
输出样例:400
#include<iostream>
using namespace std;
int main(){
int x,n, ans=0; cin>>x>>n;
for(int i=1; i<=n; i++, x++){
if(x>7) x%=7;//如果是周八,那就回到周一
if(x>=1 && x<=5) ans+=50;
}
cout<<ans;
return 0;
}
2. 棋盘
【例】输入三个自然数 n, i, j (1<=i, j<=N),输出在一个NxN格的棋盘中,与格子(i,j)同行、同列、同一对角线的所有格子的位置。
例如:n=4, i=2, j=3,表示在4x4棋盘中,指定位置为第2列第3行
输入样例:4 2 3
输出样例:
(2,1) (2,2) (2,3) (2,4) //{同一行上格子的位置}
(1,3) (2,3) (3,3) (4,3) //{同列列上格子的位置}
(1,2) (2,3) (3,4) //{左上到右下对角线上的格子的位置}
(4,1) (3,2) (2,3) (1,4) //{左下到右上对角线上的格子的位置}
解析:这样的题目一旦涉及到二维地图坐标,就可以考虑找下标规律,如
假设原地图的坐标是这样的:
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
按照 ij 的形式书写, i表示行数,j表示列数
并且根据这样的坐标图,可以找到规律:
同一行:i相等
同一列:j相等
左上角到右下角:j-i是定值
左下角到右上角:i+j是定值
在根据这样的规律来解题:参考程序如下
#include<iostream>
using namespace std;
int main(){
int n=4,x=2,y=3; cin>>n>>x>>y;
for(int i=1; i<=n; i++){
cout<<"("<<x<<","<<i<<") ";//同一行,行不变
}cout<<endl;
for(int i=1; i<=n; i++){
cout<<"("<<i<<","<<y<<") ";//同一列,列不变
}cout<<endl;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){//左上到右下,j-i是定值
if(j-i==y-x) cout<<"("<<i<<","<<j<<") ";
}
}cout<<endl;
for(int i=n; i>=1; i--){
for(int j=1; j<=n; j++){//左下到右上,i+j是定值
if(i+j==x+y) cout<<"("<<i<<","<<j<<") ";
}
}
return 0;
}
3. 积木大赛
【例】春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成第i块积木的最终高度需要是hi 。
在搭建开始之前,没有任何积木(可以看成n块高度为0的积木)。接下来每次操作,小朋友们可以选择一段连续区间[L,R],然后将第L块到第R块之间(含第L块和第R块)所有积木的高度分别增加1,小M是个聪明的小朋友,她很快想出了建造大厦的最佳策略,造所需的操作次数最少。但她不是一个勤于动手的孩子,所以想请你帮忙实现这个策略,并求出最少的操作次数。
输入格式:
输入包含两行,第1行包含一个整数n,表示大厦的宽度;
第2行包含n个整数,第i个整数为hi。
输出格式:
输出仅1行,即建造所需的最少操作数。
输入样例
5
2 3 4 1 2
输出样例:5
说明:其中一种可行方案[1,5] [1,3] [2,3] [3,3] [5,5]
数据范围: 1<=n<=100000, 0<=hi<=10000
解析:这道题目需要仔细读题,认真分析,找到问题的关键之处。
当 h[i+1] > h[i] 时,结果应该新增 h[i+1]-h[i]
当 h[i+1] <= h[i] 时,不用操作
#include<iostream>
using namespace std;
int main(){
int n; cin>>n;
int ans=0,h=0;
for(int i=1; i<=n; i++){
int a; cin>>a;
if(a>h) ans += a-h;
h=a;
}
cout<<ans;
return 0;
}