• [PAT] A1025 PAT Ranking


    tips

    1 关注排名的实现代码。

    2 熟练sort的使用。

    3 熟练vector的使用。

    插入用xxx.push_back(i);

    题目大意

    有n个考场,每个考场有若干数量的考生。现在给出各个考场中考生的准考证号和分数,要求将所有考生按分数从高到低排序,并按顺序输出所有考生的准考证号、排名、考场号、考场内排名。
    原题链接

    思路

    1 按考场读入各考生的信息,并对当前读入考场的所有考生进行排序。之后将该考场的所有考生的排名写入结构体。

    这里用了vector保存考生信息

    for (j = 0; j < k; j++){
    	testees temp;
    	scanf("%s %d", &temp.id, &temp.score);
    	temp.ln = i + 1;
    	test.push_back(temp);
    }
    

    排序。
    排名的实现。

    sort(test.begin() + total, test.end(), cmp);
    int rank = 1;
    est[total].lr = 1;
    for (j = total + 1; j < total + k; j++) {
    	if (test[j].score == test[j - 1].score)
    		test[j].lr = test[j - 1].lr;
    	else test[j].lr = j - total + 1;
    }
    

    2 对所有考生进行排序,并计算总排名。

    3 输出。

    AC代码

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<string.h>
    #include<vector>
    #include<algorithm>///////
    #include<iostream>
    using namespace std;
    #define N 102
    struct testees {
    	char id[14];
    	int score;
    	int fr, ln, lr;
    };
    bool cmp(testees a, testees b) {
    	if (a.score == b.score)return strcmp(a.id, b.id) < 0;
    	else return a.score > b.score;
    }
    int main(){
    	int n;
    	scanf("%d", &n);
    	int total = 0;
    	int i, j;
    	vector<testees> test;
    	for (i = 0; i < n; i++){
    		int k;
    		scanf("%d", &k);
    		for (j = 0; j < k; j++){
    			testees temp;
    			scanf("%s %d", &temp.id, &temp.score);
    			temp.ln = i + 1;
    			test.push_back(temp);///////
    		}
    		sort(test.begin() + total, test.end(), cmp);
    		int rank = 1;
    		test[total].lr = 1;
    		for (j = total + 1; j < total + k; j++) {
    			if (test[j].score == test[j - 1].score)
    				test[j].lr = test[j - 1].lr;
    			else test[j].lr = j - total + 1;
    		}////////
    		total += k;
    	}
    	sort(test.begin(), test.end(), cmp);
    	test[0].fr = 1; 
    	for (i = 1; i < total; i++){
    		if (test[i].score == test[i - 1].score) {
    			test[i].fr = test[i - 1].fr;
    		}
    		else test[i].fr = i + 1;
    	}/////////
    	printf("%d
    ", total);
    	for (i = 0; i < total; i++)
    		printf("%s %d %d %d
    ", test[i].id, test[i].fr, test[i].ln, test[i].lr);
    	return 0;
    }
    
    
  • 相关阅读:
    kettle excel input 利用通配符一次读入多份文件
    PowerDesigner Name、Code 映射设置
    PowerDesigner 建立约束
    PowerDesigner 创建概念模型、转换显示风格、概念模型转逻辑模型
    SQL 语言分类
    PowerDesigner 使用域、逻辑模型转物理模型、查看DDL语句
    DB、ETL、DW、OLAP、DM、BI关系结构图
    读懂BI商业智能与大数据应用的区别
    java 生成excel
    IntelliJ IDEA 2016 2.5 安装 并使用其新建一个maven web项目部署发布
  • 原文地址:https://www.cnblogs.com/yue36/p/12837829.html
Copyright © 2020-2023  润新知