奥运排序

来源:互联网 发布:linux系统初始网络配置 编辑:程序博客网 时间:2024/04/28 08:14
题目描述:

按要求,给国家进行排名。

输入:
有多组数据。
第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
接下来一行给出M个国家号。
输出:
排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 
对每个国家给出最佳排名排名方式 和 最终排名
格式为: 排名:排名方式
如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例 
如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4.
每组数据后加一个空行。
样例输入:
4 44 8 16 6 24 8 22 12 40 1 2 34 28 10 18 11 28 12 38 13 40 3
样例输出:
1:31:12:11:21:11:1
------------------------------
解析题意:
只需要排几个序。最后的那一行如 0 3 只排0和3这一索引
就是排名【按最好成绩来排名】+第二次排名。第二次排名,输出最小的,最小的顺序为:排名方式,金牌总数【1】 < 奖牌总数【2】 < 金牌人口比例【3】 < 奖牌人口比例【4】 
import java.util.Scanner;public class Main {    public static void main(String args[]) {        Scanner cin = new Scanner(System.in);        int N, M;/*第一行给出国家数N,要求排名的国家数M,具体序号是最后一行*/        while (cin.hasNext()) {            N = cin.nextInt();            M = cin.nextInt();            Contry[] contries = new Contry[N];            Contry[] waitingContries = new Contry[M];            for (int i = 0; i < N; i++) {                contries[i] = new Contry();                contries[i].setName(i);                contries[i].setGold(cin.nextInt());// 金牌数                contries[i].setMedal(cin.nextInt());//奖牌数                contries[i].setPopulation(cin.nextInt());//人口数                double GDP = contries[i].getGold() * 1.0                        / contries[i].getPopulation();  //金牌平均数                double MDP = contries[i].getMedal() * 1.0                        / contries[i].getPopulation();  //奖牌平均数                contries[i].setGDP(GDP);                contries[i].setMDP(MDP);            }            for (int i = 0; i < M; i++) {                waitingContries[i] = new Contry();                waitingContries[i] = contries[cin.nextInt()];//要排名的每一家赋值            }            for (int i = 0; i < M; i++) {     //两个for循环,依次比较                // 金牌数排名                waitingContries[i].CRanking = 1;                for (int j = 0; j < M; j++) {                    if (waitingContries[i].getGold() < waitingContries[j].getGold()) {                        waitingContries[i].CRanking++; //如果是最大,就是初始化的1了;                    }                }                waitingContries[i].Ranking = waitingContries[i].CRanking;                waitingContries[i].RankingType = 1;                // 奖牌数排名                waitingContries[i].CRanking = 1;                for (int j = 0; j < M; j++) {                    if (waitingContries[i].getMedal() < waitingContries[j].getMedal()) {                        waitingContries[i].CRanking++;                    }                }                if (waitingContries[i].Ranking > waitingContries[i].CRanking) {                    waitingContries[i].Ranking = waitingContries[i].CRanking;  //采用最小奖牌数排名                    waitingContries[i].RankingType = 2;                }                // 金牌人口比例排名                waitingContries[i].CRanking = 1;                for (int j = 0; j < M; j++) {                    if (waitingContries[i].getGDP() < waitingContries[j].getGDP()) {                        waitingContries[i].CRanking++;                    }                }                if (waitingContries[i].Ranking > waitingContries[i].CRanking) {                    waitingContries[i].Ranking = waitingContries[i].CRanking; //采用最小金牌人口比例排名                    waitingContries[i].RankingType = 3;                }                // 奖品人口比例排名                waitingContries[i].CRanking = 1;                for (int j = 0; j < M; j++) {                    if (waitingContries[i].getMDP() < waitingContries[j].getMDP()) {                        waitingContries[i].CRanking++;                    }                }                if (waitingContries[i].Ranking > waitingContries[i].CRanking) {                    waitingContries[i].Ranking = waitingContries[i].CRanking;                    waitingContries[i].RankingType = 4; //采用最小奖牌人口比例排名                }                // 输出结果                System.out.println(waitingContries[i].Ranking + ":"                        + waitingContries[i].RankingType);            }            //每组数据后加一个空行。              System.out.println();        }    }     public static class Contry {        private int Name;        private int Gold;        private int Medal;        private int Population;        private double GDP;        private double MDP;        private int Ranking;        private int CRanking;        private int RankingType;         public int getName() {            return Name;        }         public void setName(int name) {            Name = name;        }         public int getGold() {            return Gold;        }         public void setGold(int gold) {            Gold = gold;        }         public int getMedal() {            return Medal;        }         public void setMedal(int medal) {            Medal = medal;        }         public int getPopulation() {            return Population;        }         public void setPopulation(int population) {            Population = population;        }         public double getGDP() {            return GDP;        }         public void setGDP(double gDP) {            GDP = gDP;        }         public double getMDP() {            return MDP;        }         public void setMDP(double mDP) {            MDP = mDP;        }         public int getRanking() {            return Ranking;        }         public void setRanking(int ranking) {            Ranking = ranking;        }         public int getRankingType() {            return RankingType;        }         public void setRankingType(int rankingType) {            RankingType = rankingType;        }     }}


0 0