3 条题解

  • 2
    @ 2024-7-23 13:14:04
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n; //同学数。
        cin>>n; //输入同学数n。
        string s[n]; //n个同学名。
        int y[n],m[n],d[n],sum[n],cnt[n],old[n]; //每人的出生年y,月m,日d。
        //sum是为了方便对比取的出生时间值。
        //cnt是为了对比,记录出生时间值。
        //old是为了输出,记录出生早的人的编号。
        for(int i=0;i<n;i++)
        {
            cin>>s[i]>>y[i]>>m[i]>>d[i]; //循环输入同学名及出生年月日。
            sum[i]=y[i]*10000+m[i]*100+d[i]; //求sum,取得一个8位数(4位年份,2位月份,2位日期)。
        }
     
        for(int i=0;i<n;i++)
        {
            cnt[i]=999999998; //cnt赋大值,对比出来生日早(出生时间值sum越小,出生越早,年龄越大!)的人。
            for(int j=0;j<n;j++)
                if(sum[j]<=cnt[i]) //如果sum[j]比cnt小。
                {
                    cnt[i]=sum[j]; //cnt就赋值sum[j]以继续对比。
                    old[i]=j; //old记录当前生日最早的人的编号。
                }
            sum[old[i]]=999999999; //已取过的数赋大值,等同于清除此数,避免重复。
        }
     
        for(int i=0;i<n;i++)
            cout<<s[old[i]]<<endl; //从大到小循环输出人名。
     
        return 0;
    }
    
    • 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;
      }
      
      
      • 0
        @ 2025-2-10 13:30:55
        #include<bits/stdc++.h>
        using namespace std;
        int i,j,k,n,m;
        struct sb{
        	string name;
        	int y,m,d,bian;
        }a[1001]; 
        int cmp(sb x,sb y){
        	return x.y<y.y||x.y==y.y&&x.m<y.m||x.y==y.y&&x.m==y.m&&x.d<y.d||x.y==y.y&&x.m==y.m&&x.d==y.d&&x.bian>y.bian;
        }
        int main()
        {
        	cin>>n;
        	for(i=1;i<=n;i++){
        		cin>>a[i].name>>a[i].y>>a[i].m>>a[i].d;
        		a[i].bian=i;
        	}
        	sort(a+1,a+1+n,cmp);
        	for(i=1;i<=n;i++)
        	cout<<a[i].name<<endl;
        	return 0;
        }
        
        • 1

        信息

        ID
        457
        时间
        1000ms
        内存
        128MiB
        难度
        6
        标签
        递交数
        198
        已通过
        54
        上传者