iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
自我挑戰組

cpe30天練習系列 第 13

cpe練習day13

  • 分享至 

  • xImage
  •  

今天是練習cpe的What's Cryptanalysis題目

程式碼

#include <iostream>
#include <cctype> 
using namespace std;

int main() 
{
    int n;
    cin >> n;
    cin.ignore(); 
    int code[26] = {}; 
    string s;
    int count = 0;

    while (n--) 
	{
        getline(cin, s);
        for (int i = 0; i < s.length(); i++) 
		{
            if (isalpha(s[i])) 
			{             
                int a = toupper(s[i]) - 'A'; 
                count++;
                code[a]++;
            }
        }
    }

    for (int i = count; i >= 1; i--) 
	{
        for (int j = 0; j < 26; j++) 
		{
            if (code[j] == i) 
			{
                cout << (char)(j + 'A') << " " << code[j] << endl;
            }
        }
    }
    return 0;
}

解題方向

  • cin.ignore() → 避免讀取n後留下的\n影響第一個getline
  • code[26] → 陣列,記錄每個字母出現次數,索引0~25對應A~Z
  • count → 用來知道總共讀到幾個字母(之後要用來決定最大次數)
  • isalpha(s[i]) → 判斷s[i]是不是字母 (a-z 或 A-Z)
  • toupper(s[i]) - 'A' → 把字母轉成大寫,然後轉成0~25的整數索引
  • code[a]++ → 對應字母的出現次數 +1
  • 外層 for:從最大次數count往下檢查
  • 內層 for:檢查每個字母,如果它的次數等於目前的i,就輸出
  • (char)(j + 'A') → 把索引0~25轉回字母A~Z

上一篇
cpe練習day12
系列文
cpe30天練習13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言