得分排行

转载 2006年06月22日 16:58:00

假設有一教師依學生座號輸入考試分數,現希望在輸入完畢後自動顯示學生分數的排行,當然學生的分數可能相同。
這個問題基本上要解不難,只要使用額外的一個排行陣列走訪分數陣列就可以了,直接使用下面的程式片段作說明:

for(i = 0; i < count; i++) {
    juni[i] = 1;
    for(j = 0; j < count; j++) {
        if(score[j] > score[i])
            juni[i]++;
    }
}

printf("得分/t排行/n");
for(i = 0; i < count; i++)
    printf("%d/t%d/n", score[i], juni[i]);


 
上面這個方法雖然簡單,但是反覆計算的次數是n^2,如果n值變大,那麼運算的時間就會拖長;改變juni陣列的長度為n+2,並將初始值設定為0,如下所示:

得分排行


接下來走訪分數陣列,並在分數所對應的排行陣列索引元素上加1,如下所示:

得分排行


將排行陣列最右邊的元素設定為1,然後依序將右邊的元素值加至左邊一個元素,最後排行陣列中的「分數+1」」就是得該分數的排行,如下所示:

得分排行

這樣的方式看起來複雜,其實不過在計算某分數之前排行的人數,假設89分之前的排行人數為x人,則89分自然就是x+1了,這也是為什麼排行陣列最右邊要設定為1的原因;如果89分有y人,則88分自然就是x+y+1,整個陣列右邊元素向左加的原因正是如此。

如果分數有負分的情況,由於C/C++或Java等程式語言無法處理負的索引,所以必須加上一個偏移值,將所有的分數先往右偏移一個範圍即可,最後顯示的時候記得減回偏移值就可以了。

import java.io.*;
public class ScoreRank {

  public static void main(String[] args) {
    final int MAX = 100;
    final int MIN = 0;
    int[] score  = new int[MAX+1];
    int[] rank   = new int[MAX+2];
    //从控制台输入要排序的数据.
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    int count = 0;
    do{
      System.out.println("Please input the "+(count+1)+" score,input -1 to over!");
      try {
        score[count++] = Integer.parseInt(input.readLine());
      }
      catch (IOException ex) {
        System.out.println("IOException");
      }
      catch (NumberFormatException ex) {
        System.out.println("NumberFormatException");
      }
    }while(score[count-1]!=-1);
    count--;
    /*
    for(int i =0 ; i<count ; i++){
      System.out.println(score[i]);
    }*/
    //排名
    for(int i=0 ; i<count ; i++){
      rank[score[i]]++;
    }
    rank[MAX+1] = 1;
    for(int i=MAX ; i>0 ; i--){
      rank[i] = rank[i] + rank[i+1];
    }
    System.out.println("得分/t排行");
    for(int i=0;i<count;i++){
      System.out.println(score[i]+"/t"+rank[score[i]+1]);
    }
  }
}

得分排行算法

题目 假设有一教师依学生座号输入考试分数,现希望在输入完毕后自动显示学生分数的排行,当然学生的分数可能相同 算法: 1、 走访分数阵列A1,获得各分数人数的阵列A2 2、 对A2分数阵列进行向左相...
  • vivitue
  • vivitue
  • 2014年08月20日 22:56
  • 3592

得分排行(c/python)

说明 假设有一教师依学生座号输入考试分数,现希望在输入完毕后自动显示学生分数的排行 ,当然学生的分数可能相同。解法: 用排名的阵列去走访分数阵列 排名阵列rank[N+2] 接下来走访分数阵列s...
  • qq_34637408
  • qq_34637408
  • 2017年11月23日 22:00
  • 248

深度学习入门课程学习笔记02 得分函数

本篇学习笔记对应深度学习入门课程 第三课 得分函数前向传播之-得分函数 剧透:深度学习必备的两个大知识点分别是前向传播和反向传播啦,这里节课我们会先着手把前方传播的所涉及的所有知识点搞定!我相信这...
  • tangyudi
  • tangyudi
  • 2016年07月31日 22:22
  • 1681

lucene学习三:lucene检索得分

检索的得分相当重要,这关乎你的搜索结果排名,因为百度搜索的东西特别多好多页,用户根本不可能会一直看到100页,也就会第一页和后几页,在访问量为王的的互联网时代,排名相对重要。lucene对于得分有一套...
  • pangliang_csdn
  • pangliang_csdn
  • 2016年06月24日 11:36
  • 1059

算法竞赛入门经典 习题3-1 分数统计 习题 3-2 单词的长度

习题3-1 分数统计 输入一些学生的分数,哪个分数出现的次数最多?如果有多个并列,从小到大输出。 任务1:分数均不超过100的非负整数 任务2:分数均不超过100的非负实数,但最多保留两位小数。...
  • oceaniwater
  • oceaniwater
  • 2014年11月04日 14:38
  • 1841

php日周月排行版

PHP 获取当前天的开始时间、结束时间: PHP mktime()函数,返回一个指定日期的Unix时间戳。 $t = time(); $start_time = mktime(0,0,0,...
  • hello_xiaoyu
  • hello_xiaoyu
  • 2017年05月22日 14:57
  • 386

2017年全球最受欢迎的前端技术JS框架和薪酬排行("墙裂"推荐)

回顾过去的一年,前端技术发展很快,让我们看看全球前端技术的使用情况: 从图中可以总结出以下以下几点: I. 全球目前在使用并且想要使用的前三名(I’ve USED it before, and...
  • superdangbo
  • superdangbo
  • 2017年12月24日 00:04
  • 332

倾向得分匹配(Propensity Score Matching) 通俗解析及在Stata里的运用

转载: http://blog.sina.com.cn/s/blog_626867f30101h3ea.html 倾向得分匹配法是一种研究方法,它在研究某项治疗、政策、或者其他事件的影响因素...
  • huludan
  • huludan
  • 2016年05月29日 20:04
  • 4553

Unity3D学习(5)之工厂回收利用的3D版飞碟游戏

这一次我们来做的任务是3D版鼠标点击鼠标的游戏。我们先来看一下游戏需求。 案例研究:“鼠标打飞碟”游戏设计 游戏需求:     1. 分多个 round , 飞碟数量每个 round 都是 n ...
  • zzj051319
  • zzj051319
  • 2017年03月26日 14:22
  • 686

【2016——-编程语言排行以及优缺点分析】

网上一直流传个笑话,相信大家已经耳熟能详了: C++程序员看不起C程序员, C程序员看不起java程序员, java程序员看不起C#程序员, C#程序员看不起美工。 周末了,美工带着妹子出去...
  • singit
  • singit
  • 2017年02月08日 00:52
  • 7888
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:得分排行
举报原因:
原因补充:

(最多只允许输入30个字)