日期: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;
}
沒有留言:
張貼留言