b009: 無限猴子定理
讀入2個字串s1及s2,長度為n1、n2,問是否可由s2挑n1個字(順序不可對調)湊成s1
例如:{s1=ABC、s2=AXBXC}可,但{s1=YES、s2=YXyesS}不可:因找不到E
又{s1=YES、s2=YXyesSE}也不可:因SE順序不對
又{s1=YES、s2=YXyesSE}也不可:因SE順序不對
宣告字串s1,s2、宣告整數n1,n2, i,j :string s1,s2; int n1,n2,i,j;
讀入兩個字串 : cin >> s1 >>
s2;
設定字串長度: n1=s1.size(); n2=s2.size();
s2由i=0~n2-1一個一個往後找:
for(i=0,j=0; i<n2 && j<n1; ++i)
若與s1[j]同則j+1{j從0開始} :
if( s2[i] == s1[j] ) ++j;
註:迴圈i>=n2或j>=n1結束{ for迴圈可同時設兩個初值以逗號隔開 }
迴圈結束時若j≠n1則表示s1沒找完整:if(j != n1) cout <<”NO” <<
endl;
否則就是可以找到: else cout <<”YES” << endl;
b010: 編碼破解
讀入1個字串s{只有大寫字母}解碼印出 {每個字母往前2格,C->A、D->B、…、B->Z、A->Y}
例如:{s= UVQR解碼後=STOP},{s= FWVA解碼後=DUTY}
宣告字串s、宣告整數n, i,j :string s; int n,i,j;
讀入字串 : cin >> s;
設定字串長度: n=s.size();
迴圈i=0~n-1對S的每個字元: for(i=0; i<n ; ++i) { 以下兩行 }
轉成0~25{A~Z}的對照碼 j: j= (s[i]-'A'+24)%26; //有更正
將對照碼轉成字元印出A~Z: cout << char('A'+j);
印完所有字元後,再印換行 : cout << endl;
註:大寫字母A~Z的字元在電腦內部存成整數值A是65 ~ Z是90
例:UVQR
i
|
s[i]字
|
s[i]數
|
轉成j
|
char(‘A’+j)
|
印
|
0
|
U
|
85
|
18
|
char(83)
|
S
|
1
|
V
|
86
|
19
|
char(84)
|
T
|
2
|
Q
|
81
|
14
|
char(79)
|
O
|
3
|
R
|
82
|
15
|
char(80)
|
P
|
例:FWVA
i
|
s[i]字
|
s[i]數
|
轉成j
|
char(‘A’+j)
|
印
|
0
|
F
|
70
|
5
|
char(3)
|
D
|
1
|
W
|
87
|
20
|
char(20)
|
U
|
2
|
V
|
86
|
19
|
char(19)
|
T
|
3
|
A
|
65
|
0
|
char(24)
|
Y
|
0 意見:
張貼留言