洛谷 P1093 奖学金
题目
见题目链接
题目链接P1093 奖学金 - 洛谷
输入
见题目链接
输出
见题目链接
样例
见题目链接
题解
由于数据范围较小(n<=300),因此我们可以直接采用冒泡排序。由于题目中说优先采用对总分进行排序,再根据语文成绩,最后根据学号。因此我们在进行冒泡排序时可以进行判断,若两个相邻的学生的总分相同,我们比较他们的语文成绩,如果他们两个的语文成绩也相等,再比较他们的学号。
代码
#include <iostream>
#include <stdlib.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
using namespace std;
int main()
{
int chin[305],sum[305],number[305];
int n,i,j,math,engli;
scanf("%d", &n);
for (i=0;i<n;i++)
{
scanf("%d %d %d",&chin[i],&math,&engli);
number[i] = i+1;
sum[i] = 0;
sum[i] = sum[i] + chin[i] + math + engli;
}
for (i=0;i<n-1;i++)
for (j=0;j<n-i-1;j++)
{
if (sum[j] < sum[j+1])
{
int temp;
temp = sum[j];
sum[j] = sum[j+1];
sum[j+1] = temp;
temp = chin[j];
chin[j] = chin[j+1];
chin[j+1] = temp;
temp = number[j];
number[j] = number[j+1];
number[j+1] = temp;
continue;
}
if (sum[j] == sum[j+1])
{
if (chin[j] < chin[j+1])
{
int temp;
temp = chin[j];
chin[j] = chin[j+1];
chin[j+1] = temp;
temp = number[j];
number[j] = number[j+1];
number[j+1] = temp;
continue;
}
if (chin[j] == chin[j+1])
{
if (number[j] > number[j+1])
{
int temp;
temp = number[j];
number[j] = number[j+1];
number[j+1] = temp;
continue;
}
}
}
}
for (i=0;i<5;i++)
cout << number[i] << ' ' << sum[i] << endl;
return 0;
}
P.S. 请忽略那么多的include,仅仅是因为懒得选,所以无论做什么题目都是这一个模版直接全加上