Kattis-Prva

Kattis-Prva

YuDong Lv2

題目: Kattis - Prva

出處: (https://open.kattis.com/problems/prva )

個格子,每個格子有些是字有些是# (代表被阻擋)。
我們要以 一行 或以 一列 去搜尋最短字詞(2個字)。

解題方法:

輸入之後,我先找 一列,再找 一行
我們需要一個 字串s,存放我們要找的東西。

大概如下:

1
2
3
4
5
6
7
8
9
10
11
12
#include "iostream"
using namespace std;

int main() {
int n,m;
string s[25];
cin >> n >>m;
for (int i=0;i<n;i++) {
cin >> s[i];
}
}

然後先從 一列 開始搜尋。
如果不是#的
因為這樣,我們需要兩個字串

  1. 答案 ans
  2. 臨時字串 temp
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
#include "iostream"
using namespace std;

int main() {
int n,m;
string s[25];
cin >> n >>m;
for (int i=0;i<n;i++) {
cin >> s[i];
}

//接續上
string ans="",temp = "";
//跟ans一樣初始化 (空字串)。
for(int i=0;i<n;i++) {
temp = ""; //迴圈要初始化,不然他不會清空。你可以選擇放在迴圈裡初始化就好`
for(int j=0;j<m;j++) {
if(s[i][j] != '#') {
temp = temp + s[i][j];
continue;
}
}
}
}

接下來判斷temp是否有否則他不是一個字
如果有再判斷ans是否為空的
如果是,就令ans = temp
不是的話 比較ans 與 temp中
ans是否有比temp長
如果有,則另ans = temp
如果沒有 ,初始化temp
出迴圈,再做一次判斷的部分

具體做法如下:

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
#include "iostream"
using namespace std;

int main() {
int n,m;
string s[25];
cin >> n >>m;
for (int i=0;i<n;i++) {
cin >> s[i];
}
string ans="",temp = "";
//跟ans一樣初始化 (空字串)。
for(int i=0;i<n;i++) {
temp = "";
for(int j=0;j<m;j++) {
if(s[i][j] != '#') {
temp = temp + s[i][j];
continue;
}
if(temp.length() >=2) {
if(ans == "" ) {
ans =temp;
temp = "";
continue;
}
if(ans > temp) ans = temp;
}
} //出迴圈
if(temp.length() >=2 ){
if(ans == "") {
ans = temp;
temp = "";
continue;
}
if (ans > temp) ans = temp;
}
}
}

最後一步: 找 一行 的部分。
與列同理,只是將 for迴圈的i j 調轉過來

完整code:

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "iostream"
using namespace std;

int main() {
int n,m;
cin >> n >> m;
string s[25];
for (int i=0;i<n;i++) {
cin >> s[i];
}
string temp,ans="";
for(int i=0;i<n;i++) {
temp = "";
for(int j=0;j<m;j++) {
if(s[i][j] != '#') {
temp = temp + s[i][j];
continue;
}
if(temp.length() >=2) {
if(ans == "") {
ans = temp;
temp = "";
continue;
}
if(ans > temp) ans = temp;
}
temp = "";
}
if(temp.length() >= 2) {
if(ans == "") {
ans = temp;
temp = "";
continue;
}
if(ans > temp ) ans = temp;
}
}
//行
for(int j=0;j<m;j++) {
string temp = "";
for(int i=0;i<n;i++) {
if(s[i][j] != '#') {
temp = temp + s[i][j];
continue;
}
if(temp.length() >=2) {
if(ans =="") {
ans = temp;
temp = "";
continue;
}
if(ans > temp) ans = temp;
}
temp = "";
}
if(temp.length() >=2) {
if(ans =="") {
ans = temp;
temp = "";
continue;
}
if(ans > temp ) ans = temp;
}
}
cout << ans << "\n";
}

註:

  • continue是為了讓temp繼續收集字,不然只有一個字的話就不會進去下面的判斷。
  • 注意出迴圈的部分。
留言
此頁目錄
Kattis-Prva