3 条题解

  • 0
    @ 2025-2-15 15:25:19
    #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
    上传者