杭电--题目

题目描述:

ackson想知道他在班级中的排名.教授已经公布班级中人的
    学号和分数的列表.计算Jackson的排名,如果他分数是最高的(包
    括和他分数一样),那么他的排名是1,如果他分数是第二高(包括
    和他分数一样的),那么他的排名是2,等等
输入:
    输入多个测试用例,以Jackson的学号为输入开始.学号是
    10000000到99999999之间的整数.之后输入所有学生的学号和分数
    .分数是0到100的整数.这个课堂上的学生数不超过1000.每个学生
    的学号是不同的.以输入学号和分数都为0表示输入结束.
输出:
    通过每个测试用例数据,在新的一行输出Jackson的班级排名
样例的输入:
    20070101
    20070102 100
    20070101 33
    20070103 22
    20070106 33
例子的输出:
    2
#include <stdio.h>
#include <stdlib.h>

typedef 
   struct 
   {
      int  num  ;
      int  mark ;   
   } 
STD;

int input( STD * , int , int * );
int rank( STD [] , int , int );

int main( void )
{
  int jack_n ;
    
  while ( scanf( "%d" , &jack_n ) != EOF )
  {
     STD stu[ 1000 + 1 ] ;
     int sum ;
     int jack_m ;
     
     sum = input( stu , jack_n , &jack_m ); //输入并获得数据总数及Jack的成绩 
     printf("%d\n" , rank( stu , sum , jack_m ) );//输出Jack的名次 
  }
  
  system("PAUSE");    
  return 0;
}

int input( STD * p_stu , int j_n , int * p_j_m )
{
   STD * p_ini = p_stu ;
    
   while ( scanf( "%d%d" , &p_stu->num , &p_stu->mark ) ,
           p_stu -> num != j_n ) //读入数据直到Jack的 
      p_stu ++ ;
   
   * p_j_m = p_stu ++ -> mark ;  
   
   while ( scanf( "%d%d" , &p_stu->num , &p_stu->mark ) , 
           p_stu->num != 0 || p_stu->mark != 0 ) //读Jack后面的
      p_stu ++ ;
   
   return p_stu - p_ini ;
}

int rank( STD stu[] , int n , int j_m )
{
   int r = 1 ;
   int i ;
   
   for ( i = 0 ; i < n ; i ++ )
      if ( stu[i].mark > j_m  )
         r ++ ;

   return r ;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值