題解
作者 | 內容 | 連結 |
---|---|---|
海牛 | 觀念題 | HackMD |
吳邦一 | C++ Python | P1 P2 P3 P4 P1 P2 P3 P4 |
謝一 | C++ | HackMD |
橘子 | C++/Python | HackMD |
Koying | C++ | HackMD |
小律 | C++ | HackMD |
阿祁 | Java | HackMD |
ZeroJudge
P1:i399: 1. 數字遊戲
P2:i400: 2. 字串解碼
P3:i401: 3. 雷射測試
P4:i402: 4. 內積
P1:數字遊戲
輸入:3 個數字(1~9)。
輸出:出現同一數字的最多次數、不重複的數字(大到小)。
範例:輸入 1 1 3,最多次數:2,不重複的數字(大到小):3 1。
#include <iostream>
using namespace std;
int a[10];
int main(){
int n, count=0;
for(int i=0; i<3; i++){
cin >> n;
a[n]++;
count = max(count, a[n]);
}
cout << count << ' ';
for(int i=9; i>=1; i--)
if(a[i] != 0)
cout << i << ' ';
}
P2:字串解碼
輸入:m個長為n由0和1組成的字串e、長為n加密後的字母字串。
輸出:原本的字串。
加密流程:
(1) 如果字串e有奇數個1,假設是 ABCD,會變 CDAB。ABCDE 變 DECAB。
(2) 如果 e[i] 是 (1/0),就把原字串的 (尾/頭) 放到新字串。
解法:倒著做,(2)再(1)。我用 e[i][n] 計算共有幾個1,s2 當暫時的字串。
#include <iostream>
using namespace std;
int main(){
int m, n;
cin >> m >> n;
int e[m][n+1];
for(int i=0; i<m; i++){
e[i][n] = 0;
string input;
cin >> input;
for(int j=0; j<n; j++){
e[i][j] = input[j]-'0';
if(e[i][j] == 1) e[i][n]++;
}
}
char s[n], s2[n];
for(int i=0; i<n; i++) cin >> s[i];
for(int i=m-1; i>=0; i--){
int l=0, r=n-1;
for(int j=0; j<n; j++){
if(e[i][j] == 0) s2[l++] = s[j];
else s2[r--] = s[j];
}
for(int j=0; j<n; j++) s[j] = s2[j];
if(e[i][n]%2 != 0){
if(n%2 == 0){
for(int j=0; j<n/2; j++){
swap(s[j], s[j+(n/2)]);
}
}else{
for(int j=0; j<(n-1)/2; j++){
swap(s[j], s[j+(n+1)/2]);
}
}
}
}
for(int i=0; i<n; i++) cout << s[i];
}
P3:雷射測試
P4:內積