竞赛
考级
#include<iostream> #include<algorithm> using namespace std; struct ao_te_man{ string name; int tall; int year; }a[110]; bool cmp(ao_te_man a,ao_te_man b){ if(a.tall!=b.tall) return a.tall>b.tall; return a.year>b.year; } int main(){ int n; cin>>n; for(int i=0;i<n;i++){ cin>>a[i].name>>a[i].tall>>a[i].year; } sort(a,a+n,cmp); for(int i=0;i<1;i++){ cout<<a[i].name<<" "<<a[i].tall<<" "<<a[i].year<<endl;; } return 0; }
结构体排序模板题。 由于个人懒的问题,不想写 sort 的 cmp 函数,于是直接用的 map 来做。 map 底层是一颗红黑树,初始是从小到大排序的。 代码:
#include <iostream> #include <vector> #include <string> using namespace std; struct Alien { string name; int height, year; }; int main() { ios::sync_with_stdio(false); // 输入输出优化 cin.tie(NULL); int n; cin >> n; vector<Alien> aliens(n); // 使用 vector 存储奥特曼信息 // 读取输入 for (int i = 0; i < n; ++i) { cin >> aliens[i].name >> aliens[i].height >> aliens[i].year; } // 寻找最高奥特曼 int max_index = 0; for (int i = 1; i < n; ++i) { if (aliens[i].height > aliens[max_index].height || (aliens[i].height == aliens[max_index].height && aliens[i].year < aliens[max_index].year)) { max_index = i; } } // 输出结果 cout << aliens[max_index].name << " " << aliens[max_index].height << " " << aliens[max_index].year; return 0; }
pair用爽了。。
#include <iostream> #include <string> using namespace std; struct ac { string name ; int high , year ; }; int main(){ int n ; cin >> n ; struct ac a[n] ; for (int i = 0 ; i < n ; i++) { cin >> a[i].name >> a[i].high >> a[i].year; } int max_index = 0; for (int i = 1 ; i < n ; i++) { if (a[i].high > a[max_index].high ||( a[i].high ==a[max_index].high&&a[i].year<a[max_index].year)){ max_index = i; } } cout << a[max_index].name << " " << a[max_index].high << " " << a[max_index].year; return 0; }
解题思路 根据题目得知,结构体中的三个元素分别为:名字、身高和日期 排序规则为先按降序排序身高,如果身高相同则升序排序日期 代码
提交答案之后,这里将显示提交结果~