首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言解題:ACM 英文金曲大賽評分(去除最高最低分計算平均)

     編輯:關於C語言

ACM 評分系統題目解析

本題模擬歌唱比賽評分:7 位評委打分,去除一個最高分與一個最低分,計算剩餘 5 分平均,保留小數點後兩位。輸入多組測資,每組 7 個分數 + 選手姓名,至 EOF 結束。

問題描述

  • 輸入:多行,每行 7 個實數分數 + 1 個字串姓名(長度 ≤ 30)。
  • 處理:排序分數,去除首尾,計算中間 5 分平均。
  • 輸出:姓名 + 平均分(格式 %0.2f)。

解題邏輯

  1. 使用 while(scanf("%f", &score[0]) != EOF) 讀取第一個分數作為迴圈條件。
  2. 接著讀取剩餘 6 個分數與姓名。
  3. 呼叫 sort() 氣泡排序由小到大。
  4. 累加索引 1~5 的分數,除以 5 得平均。
  5. 輸出格式:printf("%s %0.2f\n", name, avg)。

完整程式碼

#include <stdio.h>

void sort(float score[]);

int main()
{
    int i;
    char name[30];
    float score[7], sum, avg;

    while(scanf("%f", &score[0]) != EOF)
    {
        sum = 0.0;
        for(i = 1; i < 7; i++) scanf("%f", &score[i]);
        scanf("%s", name);

        sort(score);

        for(i = 1; i < 6; i++) sum += score[i];
        avg = sum / 5;

        printf("%s %0.2f\n", name, avg);
    }
    return 0;
}

void sort(float score[])
{
    int i, j;
    float t;
    for(i = 0; i < 7; i++)
    {
        for(j = i; j < 7; j++)
        {
            if(score[i] > score[j])
            {
                t = score[i];
                score[i] = score[j];
                score[j] = t;
            }
        }
    }
}

執行結果示意

英文金曲大賽執行結果

範例驗證

輸入:10 10 10 10 10 10 9 xiaoyuanwang
排序後:9 10 10 10 10 10 10
去極值:10 10 10 10 10 平均 = 10.00 ✓
輸入:0 0 0 0 0 0 0 beast 平均 = 0.00 ✓

改進建議

  • 使用 qsort 替代自寫排序。
  • 姓名可能含空白?題目說無空格,%s 足夠。
  • 浮點數精度:題目僅需兩位小數,float 足夠,若要求高精度可用 double。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved