问题:1581. 马里奥的银币1
类型:数组找数
题目描述:
马里奥有很多银币,有一天他得到了一张魔法卡,只要使用这张魔法卡,就可以使得他的银币里面的最大的银币金额变得更大。如果他最大的银币是偶数的金额,可以直接翻倍;如果他最大的银币是奇数的金额,可以使得银币金额加 1 。
比如:假设马里奥存有的银币金额分别为 5 7 8 1 4 ,那么最大的银币面值为 8 ,只要使用魔法卡,银币的金额就会变为5 7 16 1 4 ;
再比如:假设马里奥存有的银币金额分别为 5 7 9 1 4 ,那么最大的银币面值为 9 ,只要使用魔法卡,银币的金额就会变为 5 7 10 1 4 ;
已知马里奥众多的银币中,面额最大的银币只有 1 个,请你求出,马里奥使用魔法卡之后,他的银币金额分别是多少?
输入:
第一行是一个整数 n 代表马里奥有 n 个银币。(n≤1000)
第二行有 n 个整数,用空格隔开,代表马里奥每个银币的金额。
输出:
一行有 n 个整数,代表使用过魔法卡之后,马里奥的银币的金额,分别是多少?
样例:
输入:
5
5 7 8 1 4
输出:
5 7 16 1 4
完整代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[1010];
int main(){
//一、分析问题
//已知:有 n 个银币。(n≤1000)
//未知:使用过魔法卡之后,银币的金额,分别是多少?
//关系: 如果他最大的银币是偶数的金额,可以直接翻倍;如果他最大的银币是奇数的金额,可以使得银币金额加 1 。
//二、定义变量(已知、未知、关系)
int n,mmax=INT_MIN,imax;
//三、输入已知
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
if(a[i]>mmax){
mmax=a[i];
imax=i;
}
}
//四、根据关系计算
if(mmax%2==0){
a[imax]+=a[imax];
}else{
a[imax]+=1;
}
//五、输出未知
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}