c++ OJ问题求解

千秋寒雪月 2017-09-29 08:50:27
题目是这样的
读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:每个测试输入包含1个测试用例,格式为

第1行:正整数n
第2行:第1个学生的姓名 学号 成绩
第3行:第2个学生的姓名 学号 成绩
... ... ...
第n+1行:第n个学生的姓名 学号 成绩
其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。

输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112

我的代码是这样
[code=c][#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

typedef struct student{
char name[10];
char ID[10];
int score;
}stu;

struct sturule
{
bool operator() (const student &a,const student &b)
{
return a.score < b.score;
}

};

int main(void)
{
int n;
cin >> n;
stu a[n];

for(int i=0;i<n;i++)
cin >> a[i].name >> a[i].ID >> a[i].score;

sort(a,a+n,sturule());

cout << a[n-1].name << " " << a[n-1].ID << endl;
cout << a[0].name << " " << a[0].ID << endl;

return 0;
}
]

提交显示部分正确,比奴知道错哪里了。几乎每次做oj题目,提交后显示部分正确,自己又找不到错哪里了,内心真的很崩溃。
...全文
911 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
因为测试用例保证只有一个最高、只有一个最低,所以读入时候就可以动态获得当前最高、最低,全部读取之后就直接得到结果了,不需要排序。

#include <stdio.h>
#include <stdlib.h>

typedef struct {
  char name[11];
  char ID[11];
  int score;
} student;

student high = {"", "", 0}, low = {"", "", 100}, in;
int n;

int main()
{
  scanf("%d", &n);
  for (; n; n--) {
    scanf("%s %s %d", in.name, in.ID, &in.score);
    if (in.score >= high.score) high = in;
    if (in.score <= low.score) low = in;
  }
  printf("%s %s\n", high.name, high.ID);
  printf("%s %s\n", low.name, low.ID);

  return 0;
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧