题解 AT886 【ゴールドラッシュ】

· · 题解

题意

题目

stove,他是一个矿工,他现在有7天挖矿时间

然后他有两个地方可以挖矿,沙漠的矿山和平原的矿山

第一行,输入7个数代表再第i天如果在沙漠的矿山拿到的工资

第二行,输入7个数代表再第i天如果在平原的矿山拿到的工资

问stove最多可以赚多少钱?

题目再翻译

stove有7天,他每天都可以去一个地方挖矿。

样例输入

第一行: 输入7个数代表第 i 天1号矿井的工资

第二行: 输入7个数代表第 i 天2号矿井的工资

样例输出

一行: stove最多可以赚取多少钱

思路

在每一天的工资中取最大值,并累加到 sum 中,再输出sum

实际操作

思路是不错的,可是脑子不够快!可能是当时有点仓促,结果 WA 咧!

面对 WA 最有效的方法就是重写一遍!

就这样,我又写了一遍……

WA(哇)! AC了!

预处理

a是存储1号矿井的工资的,b是存储2号矿井的工资,sum是累加的总工资

int a[8],b[8],sum=0;

输入处理

for(int i=1;i<8;i++){
    cin>>a[i];
}
for(int i=1;i<8;i++){
    cin>>b[i];
}

计算最大工资

求每天的1号矿井的工资与二号矿井的工资的最大值

for(int i=1;i<8;i++){
    sum+=max(a[i],b[i]);
}

提示

比大小函数最好自己写。

#define max(a,b) (((a)>(b))?(a):(b))

不完全等价于

int max(int a,int b){
    return a>b?a:b;
}

define的可以支持所有类型的数; max只能是单一类型,并且define比max速度快!

完整代码

#include<iostream>
using namespace std;
#define max(a,b) (((a)>(b))?(a):(b))
int a[8],b[8],sum=0;
int main(){
    for(int i=1;i<8;i++){
        cin>>a[i];
    }
    for(int i=1;i<8;i++){
        cin>>b[i];
    }
    for(int i=1;i<8;i++){
        sum+=max(a[i],b[i]);
    }
    cout<<sum<<endl;
    return 0;
}