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

UVA 621 秘密研究 - 字符串模式識別水題詳解

     編輯:C++ 入門

題目大意

給定多個由數字組成的字符串,根據其前綴/後綴模式判斷屬於哪一類「秘密代碼」,並輸出對應符號:

  • +:字符串為 "1"、"4" 或 "78"
  • -:以 "35" 結尾
  • *:以 '9' 開頭且以 '4' 結尾
  • ?:以 "190" 開頭

輸入第一行為測試用例數 t,隨後每行一個字符串。

解題思路:直接模式匹配

題目屬於典型的字符串模式識別「水題」,無需複雜算法,只需按優先級順序檢查上述條件。注意 + 的三種情況需優先判斷,否則 "78" 可能被誤判為其他類別。

C 語言實現

#include 
#include 

int main() {
    int t;
    char s[1000];
    scanf("%d", &t);
    while (t--) {
        scanf("%s", s);
        int len = strlen(s);

        // 優先級 1:精確匹配 + 開頭為 190
        if ((s[0] == '1' && len == 1) ||
            (s[0] == '4' && len == 1) ||
            (s[0] == '7' && s[1] == '8' && len == 2)) {
            printf("+\n");
        }
        // 優先級 2:以 35 結尾
        else if (len >= 2 && s[len-2] == '3' && s[len-1] == '5') {
            printf("-\n");
        }
        // 優先級 3:9 開頭 4 結尾
        else if (s[0] == '9' && s[len-1] == '4') {
            printf("*\n");
        }
        // 優先級 4:190 開頭
        else if (len >= 3 && s[0] == '1' && s[1] == '9' && s[2] == '0') {
            printf("?\n");
        }
    }
    return 0;
}

關鍵點提示

  • 字符串長度最大 1000,char s[1000] 足夠。
  • 檢查後綴/前綴時務必先判斷長度,防止越界訪問 s[len-2] 等。
  • 條件順序即優先級順序,題目保證每個字符串只屬於一類。

複雜度

  • 時間:O(t · L),L 為字符串平均長度,極快。
  • 空間:O(1) 額外空間。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved