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

ACM 題目解析:英文金曲大賽評分系統 (去除最高最低分求平均)

     編輯:關於C

這是一個經典的 ACM 程式設計競賽題目(英文金曲大賽)。題目要求讀取多組測試資料,每組包含 7 位評委的分數與參賽者姓名,去掉一個最高分與一個最低分後,計算剩餘 5 分的平均,輸出姓名與保留兩位小數的得分。

題目細節

  • 輸入:多行,每行 7 個實數分數 + 1 個字串姓名(長度 ≤ 30),直到 EOF。
  • 處理:排序 7 分,捨棄索引 0 與 6,對索引 1~5 求和並除以 5。
  • 輸出:姓名 + 空格 + 平均分(格式 %.2f)。

核心演算法

  1. 使用 while (scanf("%f", &num[0]) != EOF) 迴圈讀取多組資料。
  2. 氣泡排序法將 7 個分數由小排到大。
  3. 累加中間 5 個分數,計算平均並輸出。

完整 C 程式碼

#include <stdio.h>

void sort(float score[]);

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

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

        sort(num); // 由小到大排序

        for (i = 1; i < 6; i++) sum += num[i]; // 去掉首尾
        average = sum / 5;

        printf("%s %.2f\n", name, average);
    }
    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
0 0 0 0 0 0 0 beast

輸出:
xiaoyuanwang 10.00
beast 0.00

重點總結

  • 多組測資以 EOF 結束的讀取技巧
  • 簡單排序演算法應用
  • 浮點數格式化輸出 %.2f
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved