3 条题解
-
0
#include <string> using namespace std; const int maxn = 10001; int main() { int n; cin >> n; string name[maxn]; int year[maxn], month[maxn], day[maxn], index[maxn]; // 录入学生信息 for (int i = 0; i < n; ++i) { cin >> name[i] >> year[i] >> month[i] >> day[i]; index[i] = i; // 记录输入顺序 } // 冒泡排序 for (int i = 0; i < n - 1; ++i) { for (int j = 0; j < n - 1 - i; ++j) { // 比较年份 if (year[j] > year[j + 1]) { swap(name[j], name[j + 1]); swap(year[j], year[j + 1]); swap(month[j], month[j + 1]); swap(day[j], day[j + 1]); swap(index[j], index[j + 1]); } // 如果年份相同,比较月份 else if (year[j] == year[j + 1] && month[j] > month[j + 1]) { swap(name[j], name[j + 1]); swap(year[j], year[j + 1]); swap(month[j], month[j + 1]); swap(day[j], day[j + 1]); swap(index[j], index[j + 1]); } // 如果年份和月份相同,比较日期 else if (year[j] == year[j + 1] && month[j] == month[j + 1] && day[j] > day[j + 1]) { swap(name[j], name[j + 1]); swap(year[j], year[j + 1]); swap(month[j], month[j + 1]); swap(day[j], day[j + 1]); swap(index[j], index[j + 1]); } // 如果生日完全相同,按输入顺序逆序排列 else if (year[j] == year[j + 1] && month[j] == month[j + 1] && day[j] == day[j + 1] && index[j] < index[j + 1]) { swap(name[j], name[j + 1]); swap(year[j], year[j + 1]); swap(month[j], month[j + 1]); swap(day[j], day[j + 1]); swap(index[j], index[j + 1]); } } } // 输出结果 for (int i = 0; i < n; ++i) { cout << name[i] << " "; } return 0; }
信息
- ID
- 457
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 198
- 已通过
- 54
- 上传者