凤凰机器人暑期第一次作业题解
第一题:玄武湖看花

一、链接:http://www.fhaccode.com/contest/29/problem/1

二、分析:本题考查的是学生对于循环的掌握情况,在本题中我们可以知道编号小的且更高的花会遮挡住编号大且更矮的花,所以我们在考虑某一朵花会不会被遮挡时只需要考虑除了编号比它小的花朵中有没有比它更高的或者等高的花朵即可,要求第i朵花能被看到只需要第1~i-1朵花的最大值小于第i朵花的高度。如此遍历这十多花即可完成

三、优秀学生代码:
using namespace std;
int main() {
int a[10],s=1,b[10]={0};
for(int i=0;i<=9;i++)
{
cin>>a[i];
}
int da=a[0];
for(int i=1;i<=9;i++)
{
if(a[i]>da)
{
s++;
da=a[i];
}
}
cout<<s<<endl;
return 0;
}

四、代码点评
该学生在理解题目的基础上完全搞懂了题目意图考察的知识点,妥善的将首项作为初始的最大值进行处理,使得题目在负数范围内也能很好的处理问题,美中不足之处在于在于本题可以简化成不需要数组存储的形式

第二题:紫金山看日出

一、链接:http://www.fhaccode.com/contest/29/problem/2

二、分析:本题较为简单,只需要先计算出爬到山顶的时间,然后利用日出的时间倒的计算出来出发时间即可,这里考察的是对时间的计算,也是对于进制的理解,我们平时的时间的分秒就是按照60做进位,做减法也是需要做借位的。

三、优秀学生代码
using namespace std;
int main() {
int H, m;
cin >> H >> m;
int h, v;
cin >> h >> v;
if ((h / v) > (H * 60) + m) {
cout << -1;
} else {
cout << (((H * 60) + m) - (h / v)) / 60 << " " << (((H * 60) + m) - (h / v)) % 60;
}
return 0;
}

四、代码点评
该学生代码极其简练,将时和分一起做计算,并且分钟的计算结果影响了小时的计算结果,该学生用一行代码简练的表达出来,数学能力非常优秀。

第三题:吃早餐

一、链接:http://www.fhaccode.com/contest/29/problem/3

二、分析:本题很简单,只需要用嘉嘉拥有的钱去计算一下能购买的各种食物的数量再乘以事物的饱腹度计算出购买每一种食物的饱腹程度并且找到最大值即可

三、优秀学生代码:
int main(){
int n;
cin>>n;
int A[n];
int B[n];
for(int i=0;i<n;i++){
cin>>A[i];
}
for(int i=0;i<n;i++){
cin>>B[i];
}
int G[n],H[n];
for(int i=0;i<n;i++){
G[i]=10/A[i];
H[i]=G[i]*B[i];
}
int max=0;
for(int i=0;i<n;i++){
if(H[i]>max){
max=H[i];
}
}
cout<<max;
}

四、代码点评
学生思路很清晰,分别计算出每一种食物能获得的饱腹度,完成度很高,但本题不需要使用H数组进行保存,可以在一次计算中直接找到最大值,对空间和时间有优化空间。