问题标题: 酷町堂:3992 电脑**能排序

0
0
已解决
王月
王月
资深守护
资深守护

3992   电脑**能排序

经验值:0 时间限制:1000毫秒

题目描述 Description

电脑的**能由很多方面决定:例如cpu、gpu、内存、硬盘等等,我们可以通过跑分软件,来对电脑的各个方面进行评测。
现在有n(n<=105)台电脑,每个电脑的各个方面的**能用一个整数表示(分数不超过106)。请你根据每个电脑的分数,这些电脑的**能进行排名:先按照cpu分数降序排名,若cpu分数相同则按照gpu进行降序排名,若gpu分数相同则按照内存的分数降序排列,否则按照硬盘的分数进行升序排名。

输入描述 Input Description

第一行输入一个整数n(n<=10^5)
接下来n行,每行输入4个整数分别表示这台电脑cpu、gpu、内存、硬盘的跑分,空格隔开,
电脑编号按照输入顺序为1~n

输出描述 Output Description

输出n行,每行一个整数,表示排序后的电脑编号

样例输入 Sample Input

4 123450 54321 10000 5000 110000 54321 8000 5000 123450 54321 9000 5000 153450 54321 5000 5000

样例输出 Sample Output

4 1 3 2

 

 

 

 

求排序部分代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<iomanip>
#include<sstream>
using namespace std;
struct xinnen{
    int cpu,gpu,neicun,yinpan;
}a[10005];
bool cmp(xinnen x,xinnen y) {    
    
}
int b[10005];
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].cpu>>a[i].gpu>>a[i].neicun>>a[i].yinpan;
        b[i]=i;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<b[i]<<endl;
    }
    return 0;
}
 

急急急!


0
已采纳
徐知乐
徐知乐
中级守护
中级守护

bool cmp(computer a,computer b){
    if(a.cpu!=b.cpu){
        return a.cpu>b.cpu;
    }else if(a.gpu!=b.gpu){
        return a.gpu>b.gpu;
    }else if(a.ram!=b.ram){
        return a.ram>b.ram;
    }
    return a.hdd<b.hdd;
}

cmp函数

0
0
王月
王月
资深守护
资深守护

被和谐的地方是   忄   生   

0
李明昕
李明昕
资深守护
资深守护
//头文件
using namespace std;
定义结构体函数 stu{
    int cpu,gpu,nei,ying;  //分别定义CPU,GPU,内存,硬盘数据
    int n;                 //n用来存储编号
}; 
布尔 cmp(stu a,stu b){     //结构体排序,学过就应该都知道
    如果(a.cpu!=b.cpu){
        返回 a.cpu>b.cpu;
    }否则如果(a.gpu!=b.gpu){
        返回  a.gpu>b.gpu;
    }否则如果(a.nei!=b.nei){
        返回  a.nei>b.nei;
    }否则{
        返回  a.ying<b.ying;
    }
}
int n;                     //这个定义就不用多说了
stu a[10005];              
int main(){
    输入>>n;
    循环从1到n{
        输入>>a[i].cpu>>a[i].gpu>>a[i].nei>>a[i].ying;        //输入所有电脑数据
        a[i].n=i;          //记录编号
    }
    sort(a+1,a+n+1,cmp);       //sort排序
    循环从1到n{
        输出<<a[i].n<<"\n";    //输出刚刚记录的编号,注意是换行符
    }
    结束
}
望采纳谢谢

 

0
王一帆
王一帆
中级守护
中级守护

    if(x.c**!=y.c**){
        r***** x.c**<y.c**;
    }
    if(x.g**!=y.g**){
        r***** x.g**<y.g**;
    }
    if(x.n*****!=y.n*****){
        r***** x.n*****<y.n*****;
    }
    r***** x.y*****>y.y*****;

我要回答