C:(100分)
C的话是老老实实地用正序快排
#define _CRT_SECURE_NO_WARNINGS 1 #includestruct One { char name[21]; int year = 0; int month = 0; int day = 0; int ID = 0; }allpeople[110]; void myswap(int i, int j) { One a; a = allpeople[i]; allpeople[i] = allpeople[j]; allpeople[j] = a; } void mysort(int x, int y) //正序 快排 { int i = x; int j = y; int zhong = (x + y) / 2; One k = allpeople[zhong]; while (i <= j) { while (allpeople[j].year > k.year || (allpeople[j].year == k.year && allpeople[j].month > k.month) || (allpeople[j].year == k.year && allpeople[j].month == k.month && allpeople[j].day > k.day) || (allpeople[j].year == k.year && allpeople[j].month == k.month && allpeople[j].day == k.day && allpeople[j].ID < k.ID)) { j--; } while (allpeople[i].year < k.year || (allpeople[i].year == k.year && allpeople[i].month < k.month) || (allpeople[i].year == k.year && allpeople[i].month == k.month && allpeople[i].day < k.day) || (allpeople[i].year == k.year && allpeople[i].month == k.month && allpeople[i].day == k.day && allpeople[i].ID > k.ID)) { i++; } if (i <= j) { myswap(i, j); i++; j--; } } if (x < j) { mysort(x, j); } if (y > i) { mysort(i, y); } return; } int main() { int n = 0; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%s %d %d %d", &allpeople[i].name, &allpeople[i].year, &allpeople[i].month, &allpeople[i].day); allpeople[i].ID = i; } mysort(0, n - 1); for (int i = 0; i < n; i++) { printf("%sn", allpeople[i].name); } return 0; }
C++:(100分)
C++的话是参考了题解区一位大佬的思路:
把年+月+日+ID 摞成一个数字再配合map容器的应用
(map容器会自动对key值进行正序)
#include#include
python:(100分)
n = eval(input())
dian = {} # 创建一个空字典
for i in range(n):
all = input().split(" ")
name = all[0] # 名字
num = int(all[1]) * 1000000 + int(all[2]) * 10000 + int(all[3]) * 100 + (99 - i) # 最后的数字
dian[str(num)] = name # 在字典中添加元素, key是数字, value是名字
finally1 = sorted(dian.items(), key = lambda x:x[0])
# 注释有时间再补
for i in finally1:
print(i[1])



