洛谷:宇宙总统,C++
题目描述
地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 n 个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。
输入格式
第一行为一个整数 n,代表竞选总统的人数。
接下来有 n 行,分别为第一个候选人到第 n 个候选人的票数。
输出格式
共两行,第一行是一个整数 m,为当上总统的人的号数。
第二行是当上总统的人的选票。
输入输出样例
输入 #1复制
5 98765 12365 87954 1022356 985678
输出 #1复制
4 1022356
说明/提示
票数可能会很大,可能会到 100 位数字。
11 ≤ n ≤ 20
思路:
高精度,我们就是说要用字符串
排序,我们依旧采用sort结构体排序 (有1说1,C++用起来真的比C要方便狠多)
对于字符串排序,这里我们使用strcmp()函数
算是 C与C++混合用法吧
代码:
#include<bits/stdc++.h>
using namespace std;struct peak{int ID;char piao[1000];int length;
};struct peak arr[20];
int n;bool cmp(struct peak arr1,struct peak arr2)
{if(arr1.length > arr2.length)//先比较长度return 1;else if(arr1.length < arr2.length)return 0;else//长度相同,逐个比较{if(strcmp(arr1.piao,arr2.piao) > 0)return 1;else if(strcmp(arr1.piao,arr2.piao) > 0)return 0;}
}int main()
{cin >> n;for(int i = 0;i < n;i ++){arr[i].ID = i+1;cin >> arr[i].piao;arr[i].length = strlen(arr[i].piao);}sort(arr,arr+n,cmp);cout << arr[0].ID << endl << arr[0].piao;return 0;
}
收获:
字符串比较用strcmp()函数,但strcmp函数是C语言里的,相对应字符串就得定义成字符数组