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