MOOC清华《程序设计基础》第4章第2题:最高分与最低分(用线性查找法做)

题目描述

清华附小期末考试结束后,分别由数学、语文、英语按照学号顺序输入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,需要考虑周到。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值