P1781 宇宙总统 - 洛谷 (大数,字符串比较)

25 阅读1分钟

P1781 宇宙总统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

因为总统获得的票数最大可能有100位,比long long还长,所以这道题读取存储都用string。

一共有20个候选人,每个人候选人都有序列号和获得的票数两个信息,干脆用结构体存储这20个人的信息。

我们用字符串进行比较,先比较长度,长度越长的就越大,如果遇到长度相同的,那就按正常数字比较的方式比较

因为字母的ASCII码关系,比如B的ASCII 66 A的ASCII 65,所以B>A

我们可以写个cmp函数专门来比较,返回最大值即可:

image.png

#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;
}