

思路:題目要求任意選擇n張卡組成一套卡組,卡組中每張卡牌的生命值之和乘與卡組中最小的魔法值,那么我們就按魔法值來對卡組排序(從大到小),這樣我們就不用記錄卡組的最小魔法值,用結構陣列來記錄資料,這樣我們對魔法值排序的時保證里其所對應的生命值不變,(我們用sort函式排序,頭檔案為 algorithm,默認為從小到大排序),遍歷結構陣列,累加生命值并乘與當前魔法值,對比并記錄最大傷害,
注意:資料型別應該用 long long
#include<iostream>
#include<algorithm>
using namespace std;
struct card{
long long hp;//生命值
long long mp;//魔法值
};
bool cmp(card s,card ss)
{
return(s.mp>ss.mp); //讓結構陣列按魔法值從大到小排序
}
int main()
{
int n,i,j;
cin>>n;
card s[n];//定義結構陣列
for(i=0;i<n;i++)
{
cin>>s[i].hp>>s[i].mp;
}
sort(s,s+n,cmp);//讓結構陣列按魔法值從大到小排序
long long sum=0,max=0,hp=0;
for(i=0;i<n;i++)
{
hp+=s[i].hp;
sum = hp*s[i].mp;//傷害
if(sum>max)
{//比較并記錄最大傷害
max = sum;
}
}
cout<<max;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230637.html
標籤:其他
上一篇:VUE基礎(4):實作雙向系結
下一篇:設計模式之十——模板方法模式
