Main ideas and detailed notes for PAT-1004 score ranking

读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

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

输出格式:
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112
  1. Question meaning
    First enter n, then enter the name and student number in the n lines.
    Find the highest score and the lowest score
    and output the name and student number
  2. Idea
    First think of the structure method, use the structure to store personal information,
    find the maximum and minimum values ​​according to the score,
    output the name, student number, and
    pay attention to the size of the character array
  3. Code
#include<iostream>
#include<string.h>
using namespace std;
struct student{
    
    
	//注意,题目要求的数组大小最多为10个字符输入,但切记还需多一位以存储\0 
	char name[11];  //姓名 
	char sid[11];  //学号 
	int score;   //分数 
}student[10001]; 
int main(){
    
    
	int i,n;	
	int j=0,k=0;//记录最大最小的位置 
	int max,min;	//记录最大最小值 
	cin>>n;
	for(i=0;i<n;i++){
    
    
		cin>>student[i].name>>student[i].sid>>student[i].score;
	}
	max=student[0].score;
	min=student[0].score;
	//遍历数组找到分数最大最小 
	for(i=1;i<n;i++){
    
    
		if(student[i].score>max){
    
    
			k=i; 
			max=student[i].score;
		}
		if(student[i].score<min){
    
    
			j=i;
			min=student[i].score;
		}
	}
	cout<<student[k].name<<" "<<student[k].sid<<endl;
	cout<<student[j].name<<" "<<student[j].sid<<endl;

}

Guess you like

Origin blog.csdn.net/weixin_44549439/article/details/112771134