解体思路:先按分数排序,因为有并列排名的情况,如果不是并列的,排名就是数组下标。如果是并列的情况下,同等分数里第一个出现的,他的数组下标就是并列的排名。所以把出现jackson的优先排序。
#include
#include
#include
using namespace std;
int jack;
struct stu //建立一个结构体
{
int number;
int mark;
}st[1010];
bool cmp(stu a, stu b)//比较函数
{
if (a.mark == b.mark)return a.number == jack;//同等分数下,优先选择为jackson的学号
return a.mark > b.mark;
}
int main()
{
while (cin >> jack)
{
int i = 0;
while (1)
{
cin >> st[i].number >> st[i].mark;
if (st[i].number == 0 && st[i].mark == 0)break;
i++;
}
sort(st, st + i, cmp);
for (int j = 0; j < i; j++)//找到jackson的位置
{
if (st[j].number == jack) {
cout << j + 1 << endl; break;
}
}
}
return 0;
}