-
题目大意:找出在给定年龄范围内最有钱的人。输出按净财富降序排序,若相同,则按年龄增序,若还相同,按照名字增序排序。若查询结果为0,则输出"None"。
-
思路:
- 先将所有人的信息都存入vector,然后进行排序。
- 查询时输出年龄在给定范围内的人的信息,若查询结果为0,则输出"None"(用flag记录是否有查询结果)
-
知识点:
- 结构体
- sort
- 字符串数组
strcmp(str1, str2)
-
代码:
#include <iostream> #include <vector> #include <string.h> #include <algorithm> using namespace std; struct peo{ char name[9]; // 字符串数组大小定义要比8多1,因为字符串结尾有个字符串结束的标志'\0' int age, net_worth; }; bool cmp(peo a, peo b){ if(a.net_worth != b.net_worth) return a.net_worth > b.net_worth; else return a.age != b.age ? a.age < b.age : strcmp(a.name, b.name) < 0; } int main() { int n, k; scanf("%d %d", &n, &k); vector<peo> v(n); for(int i = 0; i < n; i++){ scanf("%s %d %d", v[i].name, &v[i].age, &v[i].net_worth); } sort(v.begin(), v.end(), cmp); for(int i = 0; i < k; i++){ printf("Case #%d:\n", i+1); int m, amin, amax; bool flag = false; scanf("%d %d %d", &m, &amin, &amax); for(int j = 0; j < n && m > 0; j++){ if(v[j].age >= amin && v[j].age <= amax){ flag = true; printf("%s %d %d\n", v[j].name, v[j].age, v[j].net_worth); m--; } } if(!flag) printf("None\n"); } return 0; }
-
总结:
-
细节:
- 已知名字字符串最多有8个字符,在定义字符串数组大小时应该大于8,因为字符串后面还有个停止符
'\0'
- 字符串数组的比较需要调用
string.h
库里的strcmp(str1, str2)
- 已知名字字符串最多有8个字符,在定义字符串数组大小时应该大于8,因为字符串后面还有个停止符
-
字符串数组的定义:
char name[10]; // 表示定义了 10 字节的连续内存空间。
- 如果字符串的长度大于 10:会报错
注意,这里指的**“字符串的长度”包括最后的 ‘\0’**。虽然系统会自动在字符串的结尾加 ‘\0’,但它不会自动为 ‘\0’ 开辟内存空间。所以在定义数组长度的时候一定要考虑 '\0’
-
如果字符串的长度小于 10:则只将字符串中的字符赋给数组中前面的元素,剩下的内存空间系统会自动用 \0’ 填充
-
char name[10] = "";
若字符串数组被初始化为一个空字符串,则数组每位都被初始化为
'\0'
-
【PAT】1055 The World‘s Richest (25 分)
最新推荐文章于 2022-04-08 20:09:25 发布
本文讲解了一种算法,通过结构化数据和比较函数,对一组人员的年龄、财富进行排序,查询给定年龄范围内的最富有者,如无匹配则输出'None'。关键步骤包括使用vector存储信息、自定义比较函数以及对查询结果的处理。
摘要由CSDN通过智能技术生成