熱門文章

2025年11月29日 星期六

ZeroJudge 解題筆記:k475. 4或7的倍數

作者:王一哲
日期:2025年11月29日


ZeroJudge 題目連結:k475. 4或7的倍數

解題想法


先讀取第一行的數字 a, b 以及要輸出的字串 c。接下來一次讀取一行字串,依序檢查字串中的每個字元,計算這行之中有幾個 a 或 b 的倍數,或是數字之中含有 a 或 b,最後輸出對應數量的 c。這樣的檢查方式比較慢,但是寫起來很直接。

Python 程式碼


使用時間約為 5.4 s,記憶體約為 3.4 MB,通過測試。
import sys

a, b, word = sys.stdin.readline().split()
an = int(a); bn = int(b)
for line in sys.stdin:
    line = line.strip()
    n = len(line)
    num = ""
    cnt = 0
    idx = 0
    while idx < n:
        c = line[idx]
        if c.isdigit():
            num += c
        else:
            if num.isdigit() and (a in num or b in num or int(num)%an == 0 or int(num)%bn == 0): cnt += 1
            num = ""
        idx += 1
    if num.isdigit() and (a in num or b in num or int(num)%an == 0 or int(num)%bn == 0): cnt += 1
    if cnt > 0: print(word*cnt)


C++ 程式碼


使用時間約為 0.4 s,記憶體約為 348 kB,通過測試。
#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    string a, b, word; cin >> a >> b >> word;
    int an = stoi(a), bn = stoi(b);
    string s;
    while(getline(cin, s)) {
        int n = (int)s.size();
        string num = "";
        int cnt = 0, idx = 0;
        while(idx < n) {
            char c = s[idx];
            if (isdigit(c)) {
                num += c;
            } else {
                if (isdigit(num.back()) && (num.find(a) != string::npos || num.find(b) != string::npos || stoi(num)%an == 0 || stoi(num)%bn == 0)) cnt++;
                num = "";
            }
            idx++;
        }
        if (isdigit(num.back()) && (num.find(a) != string::npos || num.find(b) != string::npos || stoi(num)%an == 0 || stoi(num)%bn == 0)) cnt++;
        for(int i=0; i<cnt; i++) cout << word;
        cout << "\n";
    }
    return 0;
}


沒有留言:

張貼留言