P1781 宇宙总统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
因为总统获得的票数最大可能有100位,比long long还长,所以这道题读取存储都用string。
一共有20个候选人,每个人候选人都有序列号和获得的票数两个信息,干脆用结构体存储这20个人的信息。
我们用字符串进行比较,先比较长度,长度越长的就越大,如果遇到长度相同的,那就按正常数字比较的方式比较
因为字母的ASCII码关系,比如B的ASCII 66 A的ASCII 65,所以B>A
我们可以写个cmp函数专门来比较,返回最大值即可:
#include<iostream>
#include<string>
using namespace std;
struct
{
string Pcount; //票数
int index; //序列号
}a[22],maxn; // 存储数组 最大值
bool cmp(string a,string b)
{
if(a.length()>b.length())return true; //长度越长就越大
if(a.length()==b.length()&&a>b)return true; //长度相同就比较ASCII
return false;
}
int main()
{
int n=0;cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].Pcount; //读入票数
a[i].index=i; //输入序列号
}
//比较出最大票数
for(int i=1;i<=n;i++)
{
if(cmp(a[i].Pcount,maxn.Pcount))
{
maxn.Pcount=a[i].Pcount;
maxn.index=a[i].index;
}
}
cout<<maxn.index<<endl<<maxn.Pcount<<endl;
}