日期:2025年12月9日
ZeroJudge 題目連結:n083. 數字序號轉換
解題想法
假設計算結果儲存在變數 m,m 的初始值為 0。將讀到的字串從索引值 0 開始,每次取長度為 3 的子字串,並用一個布林值記錄這次是否需要將子字串反序。m 加上子字串轉成 int 之後的值,再對 997 取餘數。
Python 程式碼
使用時間約為 1.8 s,記憶體約為 17.6 MB,通過測試。
import sys
MOD = 997
result = []
lines = sys.stdin.readlines()
for line in lines:
line = line.strip()
n = len(line)
m = 0
rev = False
for i in range(0, n, 3):
s = line[i:i+3]
if rev: s = s[::-1]
rev = not rev
m = (m + int(s))%MOD
result.append(str(m) + "\n")
sys.stdout.write("".join(result))
C++ 程式碼
使用時間約為 58 ms,記憶體約為 360 kB,通過測試。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
const int MOD = 997;
string s;
while(cin >> s) {
int n = (int)s.size(), m = 0;
bool rev = false;
for(int i=0; i<n; i+=3) {
string sub = s.substr(i, 3);
if (rev) reverse(sub.begin(), sub.end());
rev = !rev;
m = (m + stoi(sub))%MOD;
}
cout << m << "\n";
}
return 0;
}
沒有留言:
張貼留言