C++题目描述可多宇宙中三位数很特殊每个三位数都有自己独一无二的名字。并且对于三位数有特殊的排序方法个位大的排在最前面个位一样的看百位按百位从大到小排序如果个位和百位都一样按它们的名字从小到大排序。输入描述第一行是一个整数 n 0 n 100表示有多少个数;接下来的 n 行每行有一个整数均为三位数和一个字符串为每个三位数的名字名字互不相同输出描述输出为 n 行每行有一个字符串是这个三位数的名字
解题思路: 首先,根据输入的n,定义一个长度为n的结构体数组,用于存储输入的三位数和对应的名字。 然后,对结构体数组进行排序,排序的规则是按照题目中给出的排序方法进行比较。 最后,按照排序后的顺序输出每个三位数的名字。
具体实现步骤如下:
- 定义一个结构体,包含一个三位数和一个字符串,用于存储每个三位数及其对应的名字。
- 根据输入的n,定义一个长度为n的结构体数组。
- 使用循环读取n行输入,将每行的三位数和字符串分别存储到结构体数组的相应位置。
- 使用标准库函数sort对结构体数组进行排序,排序的比较函数按照题目中给出的排序规则编写。
- 使用循环输出排序后的结构体数组中每个三位数的名字。
C++代码如下所示:
#include
// 定义结构体,包含一个三位数和一个字符串 struct Number { int num; string name; };
// 比较函数,按照题目中给出的排序规则进行比较 bool cmp(Number a, Number b) { if (a.num % 10 != b.num % 10) { return a.num % 10 > b.num % 10; // 个位大的排在前面 } else if (a.num / 100 != b.num / 100) { return a.num / 100 > b.num / 100; // 百位大的排在前面 } else { return a.name < b.name; // 名字按照从小到大排序 } }
int main() { int n; cin >> n;
// 定义长度为n的结构体数组
Number numbers[n];
// 循环读取n行输入
for (int i = 0; i < n; i++) {
cin >> numbers[i].num >> numbers[i].name;
}
// 对结构体数组进行排序
sort(numbers, numbers + n, cmp);
// 循环输出排序后的每个三位数的名字
for (int i = 0; i < n; i++) {
cout << numbers[i].name << endl;
}
return 0;
原文地址: http://www.cveoy.top/t/topic/h0pC 著作权归作者所有。请勿转载和采集!