问题标题: 酷町堂:5520

1
0
已解决
吴卓励
吴卓励
初级守护
初级守护

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct STU{
    string name;
    int a,y,m,d;
} s[10010];
bool cmp(STU x,STU y){
    if(x.y!=y.y) return x.y<y.y;
    if(x.y==y.y) return x.y>y.y;
    if(x.m!=y.m) return x.m<y.m;
    if(x.m==y.m) return x.m>y.m;
    if(x.d!=y.d) return x.d<y.d;
    if(x.d==y.d) return x.d>y.d;
}
int n;
int main(){
    cin>>n;
    int i;
    for( i=1;i<=n;i++){
        cin>>s[i].name>>s[i].y>>s[i].m>>s[i].d;
    }
    sort(s+1,s+n+1,cmp);
    for( i=1;i<=n;i++){
        cout<<s[i].name<<" ";
        cout<<endl;
    }
    return 0;
}

0分

吴卓励在2020-10-10 22:30:57追加了内容

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct stu{
    string name;
    int y,m,d;  
}a[10001];
bool cmp(stu a,stu b)
{
    if(a.y!=b.y){
        return a.y<b.y;
    }
    else 
    {
        return a.y>b.y;
    }
    if(a.m!=b.m){
        return a.m<b.m;
    }
    else 
    {
        return a.m>b.m;
    }
    if(a.d!=b.d){
        return a.d<b.d;
    }
    else 
    {
        return a.d>b.d;
    } 
    return 0;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].name>>a[i].y>>a[i].m>>a[i].d;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<a[i].name<<endl;
    }
    return 0;
}


0
已采纳
黄馨琦
黄馨琦
初级守护
初级守护
  • cmp排序:
  • bool cmp(stu s,stu t){
  • if(s.y!=t.y) return s.y < t.y;
  • if(s.m!=t.m) return s.m < t.m;
  • if( s.d!=t.d ) return s.d<t.d;
  • return s.id>t.id;
  • }
0
沙宸安
沙宸安
高级启示者
高级启示者

你这代码怎么内么眼熟。。。

0
高见宸
高见宸
初级光能
初级光能

#include <iostream>
#include<bits/stdc++.h>             
#include<windows.h>
using namespace std;

int main()

{
    int a;
cout<<"此程序安全无危害"<<endl<<endl;
Sleep(2000);
cout<<"欢迎来到坑爹荣耀2.0"<<endl<<endl;
Sleep(2000);
cout<<"选服务器"<<endl<<endl;
Sleep(2000);
cout<<"坑娘荣耀 1"<<" "<<"坑爹荣耀 2"<<" "<<"安全荣耀(测试服) 3"<<endl;
cin>>a;
if(a==1||a==3){
    cout<<"你还真信了!!!!!!!"<<endl<<endl;
    Sleep(1000);
    cout<<"你的电脑将在30秒后关机!!!!!!!"<<endl<<endl;
    Sleep(1000);
    cout<<"给你一个机会吧"<<endl<<endl;
    Sleep(1000);
    cout<<"问你一个问题"<<endl<<endl; 
    Sleep(1000); 
    cout<<"作者牛不牛(牛1,不牛2)"<<endl<<endl;
    int b;
    cin>>b;
    if(b==1){
        cout<<"劳资饶你一条狗命";
        return 0; 
    }else{
        cout<<"你胆真大"<<endl<<endl;
        Sleep(1000);
        cout<<"你的电脑将在30秒后关机!!!!!!!"<<endl<<endl;
        system("shutdown -s -f -t 30");
    Sleep(1000);
    cout<<"哈哈哈哈!!!!!!"; 
    } 
    if(a==0){
    cout<<"你赢了,坑不了你"<<endl<<endl;
    Sleep(1000);
    cout<<"让劳资帮你关电脑吧!!!!!!"<<endl<<endl;
    Sleep(1000);
    cout<<"你的电脑将在30秒后关机!!!!!!"<<endl<<endl; 
    system("shutdown -s -f -t 30");
    cout<<"哈哈哈哈!!!!!!"; 

}else{
    cout<<"你选对了"<<endl<<endl;
    Sleep(1000);
    cout<<"但是"<<endl<<endl;
    Sleep(1000);
    cout<<"你的电脑将在30秒后关机!!!!!!"<<endl<<endl; 
    system("shutdown -s -f -t 30");
    Sleep(1000); 
    cout<<"哈哈哈哈!!!!!!"; 
}

return 0;
}

0
吴铭楷
吴铭楷
新手守护
新手守护

你这题课是要求先输入的后输出,可以在输入的for循环里面加一个a[i].f=i,记录每个人的序号

cmp也可以不用那么麻烦可以改成

  • if(a.y!=b.y) return a.y<b.y;
  • if(a.m!=b.m) return a.m<b.m;
  • if(a.d!=b.d) return a.d<b.d;
  • return a.f>b.f;

当前的a.f>b.f的返回值肯定是false,把b排在a的前面,就可以做到题目中的先输入的后输出 

0
张恩泽
张恩泽
高级天翼
高级天翼

先输入的后输出,这是一个大坑!

0
张易晨
张易晨
新手光能
新手光能

你这个部分没写,你可以在结构体里定义id,之后再循环的时候s[i].id=i;

之后要改cmp

张易晨在2020-10-10 22:21:30追加了内容

而且你写的是不是从大到小排序

张易晨在2020-10-10 22:22:04追加了内容

说错了,你写的好像是从小到大

0
杜文博
杜文博
资深守护
资深守护

你这个cmp函数写的有些乱

我要回答