题目描述
清华附小期末考试结束后,分别由数学、语文、英语按照学号顺序输入30名同学的成绩,班主任想知道三门课总分的最高分和最低分,以及取得总分最高分和最低分的两位同学的编号。(输入数据保证没有同分情况,编号由1到30)
第一行输入编号为1-30的30位同学的数学成绩,分数之间用空格隔开;第二行输入语文成绩,第三行输入英语成绩
输出四个数,分别是总分最高分,总分最低分,取得最高分同学的编号,取得最低分同学的编号
100 99 99 99 99 ... 98 97 90 60 100 98 97 96 95 ... 97 96 98 60 100 90 90 90 90 ... 96 95 94 60样例输出
300 180 1 30
#include <iostream>
using namespace std;
#define N 30
int main()
{
int Math[N] = {0}, Chinese[N] = {0}, English[N] = {0}, Total[N] = {0}, Temp[N] = {0};
int min = 0, min_id = 0, max = 0, max_id = 0;
for(int i = 0; i < N; i++)
cin >> Math[i]; //输入数学成绩
for(int i = 0; i < N; i++)
cin >> Chinese[i]; //输入语文成绩
for(int i = 0; i < N; i++)
cin >> English[i]; //输入英语成绩
for(int i = 0; i < N; i++)
Total[i] = Math[i] + Chinese[i] + English[i]; //计算总分
int LinearSearch_Min(int cards[], int n);
int LinearSearch_Min_Id(int cards[], int n);
int LinearSearch_Max(int cards[], int n);
int LinearSearch_Max_Id(int cards[], int n); //声明四个函数
for(int i = 0; i < N; i++)
Temp[i] = Total[i]; //为保证总分原始数据不被改变,设计缓存数组参与后续运算
min = LinearSearch_Min(Temp, N);
for(int i = 0; i < N; i++)
Temp[i] = Total[i]; //为保证总分原始数据不被改变,设计缓存数组参与后续运算
min_id = LinearSearch_Min_Id(Temp, N);
for(int i = 0; i < N; i++)
Temp[i] = Total[i]; //为保证总分原始数据不被改变,设计缓存数组参与后续运算
max = LinearSearch_Max(Temp, N);
for(int i = 0; i < N; i++)
Temp[i] = Total[i]; //为保证总分原始数据不被改变,设计缓存数组参与后续运算
max_id = LinearSearch_Max_Id(Temp, N);
cout << max << ' ' << min << ' ' << max_id + 1 << ' ' << min_id + 1; //适应人的习惯,id值加1
return 0;
}
//由于每个函数模块只能返回一个返回值,所以要想分别得到最大值和最大值的下标,
//就只能写两个相同的函数,然后返回其中不同的参数
int LinearSearch_Min(int cards[], int n)
{
int min = 301, min_id = -1; //最小值设为301,比三门课总分的最大值300还大,保证min可以被替换掉
for(int i = 0; i < n; i++)
if(cards[i] < min) //看cards[i]是否比预设的最小值初值小
{
min = cards[i];
min_id = i;
}
return min;
}
int LinearSearch_Min_Id(int cards[], int n)
{
int min = 301, min_id = -1; //最小值设为301,比三门课总分的最大值300还大,保证min可以被替换掉
for(int i = 0; i < n; i++)
if(cards[i] < min) //看cards[i]是否比预设的最小值初值小
{
min = cards[i];
min_id = i;
}
return min_id;
}
int LinearSearch_Max(int cards[], int n)
{
int max = -1, max_id = -1; //最大值设为-1,比三门课总分的最小值0还小,保证max可以被替换掉
for(int i = 0; i < n; i++)
if(cards[i] > max) //看cards[i]是否比预设的最大值初值大
{
max = cards[i];
max_id = i;
}
return max;
}
int LinearSearch_Max_Id(int cards[], int n)
{
int max = -1, max_id = -1; //最大值设为-1,比三门课总分的最小值0还小,保证max可以被替换掉
for(int i = 0; i < n; i++)
if(cards[i] > max) //看cards[i]是否比预设的最大值初值大
{
max = cards[i];
max_id = i;
}
return max_id;
}
需要注意的技巧:函数模块是void还是int,需要考虑周到。