牛客网刷题 | BC93 公务员面试

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。

(注:本题有多组输入)

输入描述:

每一行,输入7个整数(0~100),代表7个成绩,用空格分隔。

输出描述:

每一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。

示例1


解题思路 :

/* 解题思路 : 使用数组来解决这题

               假设最低分为100 最高分为0

               定义 min 和 max 变量 用来存放最高分和最低分

*/
 

初始化变量: 首先,我们需要初始化一个数组来存储每组的7个分数,以及两个变量来存储最高分和最低分。

读取输入: 使用 while 循环和 scanf 函数来持续读取用户的输入,直到输入结束。在循环中,我们需要为每组输入分配一个数组来存储分数。

找到最高分和最低分: 在读取每组分数后,我们需要遍历这7个分数,找到最高分和最低分。这可以通过遍历数组并更新两个变量(一个用于存储最高分,一个用于存储最低分)来实现。

计算剩余分数的总和: 在确定了最高分和最低分后,我们需要计算除去这两个分数后剩余5个分数的总和。这可以通过再次遍历数组,累加除了最高分和最低分之外的分数来实现。

计算平均分: 得到剩余5个分数的总和后,我们将其除以5来计算平均分。

格式化输出: 计算出平均分后,我们需要将其格式化为保留两位小数的格式,并使用 printf 函数输出。

循环结束条件: 输入直到用户停止输入,因此 while 循环需要一个合适的结束条件,通常是用户输入结束或者输入的数据不再满足每行7个整数的要求。


代码 1 :

/* 解题思路 : 使用数组来解决这题
               假设最低分为100 最高分为0 
               定义 min 和 max 变量 用来存放最高分和最低分
*/
# include <stdio.h> // 包含标准输入输出库

int main () {
    // 定义变量sum用来累加输入的分数
    int sum = 0;
    // 初始化min为100,假设最低分为100
    int min = 100;
    // 初始化max为0,假设最高分为0
    int max = 0;
    // 初始化一个数组arr,用来存储7个考官的分数,初始值为0
    int arr[7] = {0};

    // 循环7次,用于接收用户输入的每个分数
    for(int i = 0; i < 7; i++) 
    {
        // 使用scanf函数读取用户输入的整数,并存储在数组arr的对应位置
        scanf("%d", &arr[i]);
        // 如果当前输入的分数大于max,则更新max为这个分数
        if(arr[i] > max) 
        {
            max = arr[i];
        }
        // 如果当前输入的分数小于min,则更新min为这个分数
        if(arr[i] < min) 
        {
            min = arr[i];
        }
        // 将当前输入的分数累加到sum中
        sum += arr[i];
    }
    // 计算去掉一个最高分和一个最低分后的平均分
    // 使用5.0作为除数确保进行浮点数除法,得到精确的小数结果
    double val = (sum - max - min) / 5.0;
    // 输出计算得到的平均分,保留两位小数
    printf("%.2lf\n", val);
    // 程序结束,返回0
    return 0;
}

#include <stdio.h>
int main() {
 
    //存储数据
    int arr[7] = {0};
    int i = 0;
    while (scanf("%d%d%d%d%d%d%d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4], &arr[5], &arr[6]) != EOF) 
    {
        //找最大值
        int max = arr[0];
        for (i = 0; i < 7; i++) 
        {
            if (arr[i] > max) //遍历数组
            {
                max = arr[i];
            }
        }
        //找最小值
        int min = arr[0];
        for (i = 0; i < 7; i++) 
        {
            if (arr[i] < min) 
            {
                min = arr[i];
            }
        }
        //求和
        int sum = 0;
        for (i = 0; i < 7; i++) {
            sum = sum + arr[i];
        }
        //求平均值
        float ret = (sum - max - min) / 5.0;
        printf("%.2f\n", ret);
    }
    return 0;
 
}

代码 2 :

#include <stdio.h>

int main() {
    int scores[7]; // 存储每组7个分数的数组
    double average; // 存储计算出的平均分

    // 持续读取输入直到用户停止输入
    while (scanf("%d %d %d %d %d %d %d", &scores[0], &scores[1], &scores[2], &scores[3], &scores[4], &scores[5], &scores[6]) == 7) {
        // 初始化最高分和最低分为数组的第一个元素
        int maxScore = scores[0], minScore = scores[0];

        // 遍历数组找到最高分和最低分
        for (int i = 1; i < 7; ++i) {
            if (scores[i] > maxScore) maxScore = scores[i];
            if (scores[i] < minScore) minScore = scores[i];
        }

        // 计算除去最高分和最低分后剩余分数的总和
        int sum = 0;
        for (int i = 0; i < 7; ++i) {
            if (scores[i] != maxScore && scores[i] != minScore) {
                sum += scores[i];
            }
        }

        // 计算平均分
        average = (double)sum / 5;

        // 输出平均分,保留两位小数
        printf("%.2f\n", average);
    }

    return 0;
}

代码 3 :

#include <stdio.h> // 引入标准输入输出库,用于程序中的输入输出操作

int main() {
    int a, max = 0, small = 100, sum = 0, count = 0;
    // 初始化变量
    // a: 用于存储每次输入的分数
    // max: 用于存储当前遇到的最大分数,初始设为0
    // small: 用于存储当前遇到的最小分数,初始设为100
    // sum: 用于累加所有输入的分数
    // count: 用于计数输入的分数数量

    while (scanf("%d", &a) != EOF) // 使用while循环持续读取输入,直到EOF(文件结束符)
    {
        if (a > max) // 如果当前输入的分数a大于已知的最大分数max
        {
            max = a; // 更新max为当前输入的分数a
        }
        if (a < small) // 如果当前输入的分数a小于已知的最小分数small
        {
            small = a; // 更新small为当前输入的分数a
        }
        sum += a; // 将当前输入的分数a累加到sum中
        count++; // 计数器count加1,表示已输入一个分数

        if (count == 7) // 当计数器count等于7时,表示一组7个分数已经输入完毕
        {
            printf("%.2f\n", (sum - max - small) / 5.0); // 计算并输出这组分数的平均分,去掉一个最高分和一个最低分后
            // 重置所有变量以准备下一组分数的输入
            count = 0; // 重置计数器
            max = 0; // 重置最大分数
            small = 100; // 重置最小分数
            sum = 0; // 重置分数总和
        }
    }

    return 0; // 程序正常结束,返回0
}

代码 4 :

#include<stdio.h> // 引入标准输入输出库,用于程序中的输入输出操作

int main() {
    int arr[7] = {0}; // 初始化一个数组arr,用于存储7个考官的打分,初始值设为0
    int i = 0 , j = 0; // 初始化循环变量i和j
    float sum = 0 , aver = 0; // 初始化总分数sum和平均分aver,这里使用float类型以保留小数结果

    /* 输入成绩 */
    for( i = 0 ; i < 7 ; i++) {
        scanf("%d ",&arr[i]); // 循环读取7个整数,存储到数组arr中
    }

    /* 根据冒泡排序法排序 */
    /* 排除1到7名,数组里表示是0到6名 */
    for(i = 0 ; i < 7 ; i++) {
        for(j = 0 ; j < 7 - 1 - i ; j++) {
            if(arr[j] > arr[j+1]) { // 如果当前元素arr[j]大于下一个元素arr[j+1]
                int tmp = 0; 
                tmp = arr[j]; // 交换两个元素的位置,以实现排序
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }

    /* 这里只取2到6名的成绩加和,数组里面表示是1到5 */
    for( i = 1 ; i < 6; i++) { // 从数组的第二个元素开始累加,因为冒泡排序后,最小的元素在arr[0]
        sum += arr[i]; // 累加分数,计算去掉最高分和最低分后剩余分数的总和
    }

    /* 计算即可 */
    aver = sum / 5.00; // 计算平均分,除以5.00确保进行浮点数除法,保留小数点后两位
    printf("%.2f",aver); // 输出计算得到的平均分,保留两位小数
    return 0; // 程序正常结束,返回0
}

扩展:如何在数组中寻找最大值和最小值

 暴力搜索法(逐一遍历)

这是最直接的方法,通过遍历数组中的每个元素来找到最大值和最小值。

int findMaxAndMin(int arr[], int size) {
    if (size <= 0) return -1; // 错误处理,数组大小应该大于0

    int max = arr[0]; // 假设第一个元素是最大值
    int min = arr[0]; // 假设第一个元素是最小值

    for (int i = 1; i < size; ++i) {
        if (arr[i] > max) {
            max = arr[i]; // 发现更大的值,更新最大值
        }
        if (arr[i] < min) {
            min = arr[i]; // 发现更小的值,更新最小值
        }
    }

    return max; // 通常这个方法会返回最大值,最小值通过另一个变量返回
}

暴力搜索法,也常被称为穷举法,是一种简单直观的算法设计策略,用于解决搜索问题,包括在数组中寻找最大值和最小值。以下是使用暴力搜索法寻找数组中最大值和最小值的基本思路:

1. 初始化

  • 假设数组的第一个元素既是最大值也是最小值。
  • 用变量 max 存储最大值,用变量 min 存储最小值,并初始化为数组的第一个元素。

2. 遍历数组

  • 从数组的第二个元素开始遍历整个数组(索引从1开始,直到数组的最后一个元素)。

3. 更新最大值和最小值

  • 对于数组中的每个元素,执行以下操作:
    • 如果当前元素大于 max,则将 max 更新为当前元素的值。
    • 如果当前元素小于 min,则将 min 更新为当前元素的值。

4. 重复步骤3

  • 继续遍历数组,直到所有元素都被检查过。

5. 输出结果

  • 遍历完成后,max 变量包含数组中的最大值,min 变量包含数组中的最小值。
  • 可以返回这两个值,或者根据需要进行其他操作。

  

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值