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

C語言解題:ACM Quicksum 計算(字元位置權重加總)

     編輯:關於C語言

ACM Quicksum 題目解析

Quicksum 定義:字串中每個字元的「位置索引 (1-based) × 字元值」之和。空格值為 0,大寫字母 A=1, B=2... Z=26。輸入多行字串(以 # 開頭結束),每行輸出其 Quicksum。

計算範例

  • ACM:1×1 + 2×3 + 3×13 = 1 + 6 + 39 = 46
  • MID CENTRAL:1×13 + 2×9 + 3×4 + 4×0 + 5×3 + 6×5 + 7×14 + 8×20 + 9×18 + 10×1 + 11×12 = 650

輸入格式

  • 多行測資,每行 ≤ 255 字元,只含大寫字母與空格。
  • 行首行尾必為字母,中間可有連續空格。
  • 以單獨 # 字元結束輸入。

程式碼實作

#include <stdio.h>
#include <string.h>

int main()
{
    int i, len, sum;
    char str[255];

    while(gets(str), str[0] != '#')
    {
        sum = 0;
        len = strlen(str);
        for(i = 0; i < len; i++)
        {
            if(str[i] == ' ') sum += 0;
            else if(str[i] >= 'A' && str[i] <= 'Z')
                sum += (i + 1) * (str[i] - 'A' + 1);
        }
        printf("%d\n", sum);
    }
    return 0;
}

執行結果示意

Quicksum執行結果

關鍵細節

  • gets(str), str[0] != '#' 利用逗號運算子:先讀取再判斷首字元。
  • 空格不加分(sum += 0 可省略)。
  • 字元值計算:str[i] - 'A' + 1 將 'A'~'Z' 映射為 1~26。
  • 位置權重:i + 1(1-based)。

安全性與改進

  • gets() 不安全,建議改用 fgets(str, sizeof(str), stdin) 並手動移除換行符。
  • 可加入非法字元檢查(題目保證輸入合法)。
  • 若字串極長,sum 可能溢位 int,可用 long long。

應用場景

類似 ISBN 校驗碼、條碼校驗、雜湊函數等加權加總機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved