Uva 刷題紀錄 08/16

前情提要

這篇文章記錄了我今天在 UVA Online Judge 的刷題過程,挑戰了兩道題目,分別是與邏輯判斷相關的題目和簡單的輸入輸出處理題。透過這些題目,練習了模擬操作與字串處理的技巧,以下是解題紀錄與程式碼實現。

解題程式

  • 題目連結 340

  • 這題題目的意思就是我要到 0 就代表了要結束輸入,也就是程式要結束,然後如果 guess[0] 因為他有說範圍 1~9 所以 0 就代表這筆測試資料結束,那麼我們就會知道輸入怎麼做處理,現在剩下邏輯的部份,那我的想法就是分別計算 位置和數字都完全等於的數目,在用矩陣去紀錄哪些已經數字已經被記錄了,如果都沒有被記錄過,guess[i] == key[j] 哪麼我就把它記錄下來處理後就是答案了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <bits/stdc++.h>
#define maxn 1000+10

using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);

int n;
int kase=0;
vector<int> key(maxn);
vector<int> guess(maxn);
while(cin >> n && n != 0){
cout << "Game " << ++kase << ":"<< "\n";
for(int i=0;i<n;i++)
cin >> key[i];

while(true){
int A =0,B=0;
for(int i=0;i<n;i++){
cin >> guess[i];
}

if(guess[0] == 0) break;
vector<bool> used_key(n,false), used_guess(n,false);
for(int i=0;i<n;i++){
if(key[i] == guess[i]){
A++;
used_key[i] = true;
used_guess[i] = true;
}
}

for(int i=0;i<n;i++){
if(!used_guess[i]){
for(int j=0;j<n;j++){
if(!used_key[j] && guess[i] == key[j]){
B++;
used_key[j] = true;
break;
}
}
}
}
cout << " " << "(" << A << "," << B << ")" << "\n";
}
}
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>

using namespace std;

int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);

int c,q=1;
while((c= getchar()) != EOF){
if(c == '"'){
printf("%s",(q ? "``" : "''"));
q = !q;
}
else{
printf("%c",c);
}
}

return 0;
}