zoukankan      html  css  js  c++  java
  • 【PAT】B1015 德才论

    这道题算是挺简单,我在群里看到的别人琢磨好久过不去,大多是因为没有考虑好四种等级的判断条件
    一定要保证四种判断条件正确。
    下面这是我的代码,比较笨。后边有别人那学来的聪明些的方法

    #include<cstdio>
    #include<algorithm>
    #include<vector>
    using namespace std;
    struct student{
        int number,de,cai,sum;
    }A[100000],//H(<100为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,
    B[100000],//才分不到但德分到线的一类考生属于“德胜才”,
    C[100000],//德才分均低于H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者
    D[100000];//其他达到最低线L的考生也
    int num=0;
    bool cmp(student A,student B){
        if(A.sum!=B.sum) return A.sum>B.sum;
        else if(A.de!=B.de) return A.de>B.de;
        else return A.number<B.number;
    }
    void prr(student *arr,int Si){
        for(int i=0;i<Si;i++){
            printf("%08d %d %d",arr[i].number,arr[i].de,arr[i].cai);
            num--;
            if(num!=0)printf("
    ");
        }
    }
    int main(){
        int N,L,H,AA,BB,CC,DD;
        AA=BB=CC=DD=0;
        student temp;
        scanf("%d%d%d",&N,&L,&H);
        for(int i=0;i<N;i++){
            scanf("%d %d %d",&temp.number,&temp.de,&temp.cai);
            temp.sum=temp.de+temp.cai;
            if(temp.de>=L&&temp.cai>=L){
                num++;
                if(temp.cai>=H&&temp.de>=H){A[AA++]=temp;continue;}
                if(temp.de>=H&&temp.cai<H) {B[BB++]=temp;continue;}
                if(temp.cai<H&&temp.de<H&&temp.de>=temp.cai){C[CC++]=temp;continue;}
                D[DD++]=temp;
            }
        }
        sort(A,A+AA,cmp);
        sort(B,B+BB,cmp);
        sort(C,C+CC,cmp);
        sort(D,D+DD,cmp);
        printf("%d
    ",num);
        prr(A,AA);
        prr(B,BB);
        prr(C,CC);
        prr(D,DD);
        return 0;
    }
    

    好方法:
    用结构体数组储存数据,每个数据有一个等级变量,通过这个变量和sort函数排序,直接将四种等级分开了,省去好多事

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    struct stu{
    	char id[10];
    	int D;int C;
    	int flag,sum;
    }temp,ex[100010];
    bool cmp(stu a,stu b){
    	if(a.flag!=b.flag)return a.flag<b.flag;
    	else if(a.sum!=b.sum)return a.sum>b.sum;
    	else if(a.D!=b.D)return a.D>b.D;
    	else return strcmp(a.id,b.id)<0;
    }
    int main(){
    	int N,L,H,local=0;
    	scanf("%d %d %d",&N,&L,&H);
    	for(int i=0;i<N;i++){
    		scanf("%s %d %d",temp.id,&temp.D,&temp.C);
    		if(temp.D<L||temp.C<L)continue;
    		strcpy(ex[local].id,temp.id);
    		ex[local].D=temp.D;
    		ex[local].C=temp.C;
    		if(ex[local].D>=H&&ex[local].C>=H)ex[local].flag=1;
    		else if(ex[local].D>=H&&ex[i].C<H)ex[local].flag=2;
    		else if(ex[local].D<H&&ex[local].C<H&&ex[local].D>=ex[local].C)ex[local].flag=3;
    		else ex[local].flag=4;
    		ex[local].sum=ex[local].D+ex[local].C;
    		local++;
    	}
    	sort(ex,ex+local,cmp);
    	printf("%d
    ",local);
    	for(int i=0;i<local;i++){
    		printf("%s %d %d
    ",ex[i].id,ex[i].D,ex[i].C);
    	}
    	return 0;
    }
    
  • 相关阅读:
    第19章 辅助器方法
    第18 章 视图
    第16章 过滤器
    第15章 控制器和动作
    第14章 高级路由特性
    第13章 URL 路由
    第12章 MVC项目综述
    第8章 SportsStorePeta 导航
    第9章 SportsStorePeta 完成购物车
    第10章 SportsStorePeta 管理
  • 原文地址:https://www.cnblogs.com/hebust/p/9813325.html
Copyright © 2011-2022 走看看