编程爱好者--第5次比赛

为了这个题目,我是忙活了一整天,弄得晕头转向得,高手们都用二分排序查找和哈希表查找..而我数据结构还没学那,光知道有个线性表...程序是写出来了,有点不符合题意,即:同学名字不能是字符串,因为实在是太累了....不愿意再修改了...通过此题,首先懂的定义一个数据结构得重要行...啥大道理 也不说了....饿死了 ,吃饭去.............

(本来看到这题目,我想下边得比赛,不再做题,但是一看第6界好像挺简单得....嘻嘻,明天再看看.....)

//-----------------------------------------------------------------------------------------
//编程爱好者--第5次比赛
/*Li Ming是一个好学生,每一次考完试后他总要向老师询问自己在班上的排名情况,
这使老师感到很厌烦.于是,老师把班上所有学生的成绩都给他,并让他自己去算他在班上的排名.
但是,他有太多的同学,要得到自己的排名不太容易,于是,他向你请求帮助.


输入说明:

输入的第一行是一个整数N(1<=N<=10000),用来表示Li Ming班上总的学生人数.
接下来要输入N行,每一行输入一个名字,名字不超过30个字母.这些名字就是Li Ming班上所有学生的名字,
你可以假设不会有任何两个学生同名.
在第N+2行,要输入一个整数M(1<=M<=50),用来表示考试的次数.接下来的M个部分每个部分都将描述一次考试.

每一次考试有N行.在每一行,有一个正整数S,S不超过100,还有一个名字P,P必须是上面名单表中有的名字.
这表示在这一次考试中学生P得了S分.可以确定,名单表中所有的名字都会出现在每一次的考试中.


输出说明:

输出包括M行.在第i行,你要给出Li Ming在第i次考试之后的名次.
名次是由总分决定的.如果Li Ming和别人的分数相同,在排名表中他将排在别人的前面.


输入样例:

3
Li Ming
A
B
2
49 Li Ming
49 A
48 B
80 A
85 B
83 Li Ming


输出样例:

1
2

程序运行时间限制:10000MS   程序运行空间限制:65536K*/
//--------------------------------------------------------------------
#include <iostream>
#include <string>
using namespace std;
#define N 10000
#define X 31
int main()
{
 int n,i=0,j=0;
    int mark[N],m,y;
 int mingci[N];
 char name[X];
 int x = 0;
 int h=0;
 int value;
 cout << "Please input the class Number:" << endl;
 cin >> n;
 x = n;
 if(n <0 || n > 10000)
  cout <<"input errror" << endl;
    while (n--)
 {
  //scanf("%s",name[i++]);
 // gets(name);
  i++;
  cin >> name[i++];

 }
 cout << "Please input the number of the exam" << endl;
 cin >> m;

    if(m < 0 || m > 50 )
  cout << "error" << endl;
 y = m;
 while(m--)
 {
  n =x;
  j=0;
  while( n--)
  {
   cin >> mark[j] >> name[j];
   if(mark[j] > 100 || mark[j] < 0)
    cout << "error";
   j++;
  }
  for(int z=0;z< j;z++)
  {
   if(name[z] == 'a')//假设A为李明
   {
    value = mark[z];//李明的分数
                break;
   }
  }
  for(int w =0; w <x-1;w++)//对MARK分数得排序,按从小到大
  {
   for(int v =0; v <x-1-w;v++)
   {
    if(mark[v] < mark[v+1])
    {
     int temp = mark[v];
     mark[v] = mark[v+1];
     mark[v+1] = temp;
    }
   }
  }

  for(int g=0;g < j;g++)//
  {
   if(value >= mark[g])
   {
    
    mingci[h++] = g + 1;
   // cout << g+1 << endl;
    break;
    
   }
  }

 }
 int k=0;
 cout << "Li Ming's number is:" << endl;
 while(y--)
 {
  
  cout << mingci[k++] <<endl;
 }
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值