2016年6月10日 星期五

台中女中b009~b010

b009: 無限猴子定理
讀入2個字串s1s2,長度為n1n2,問是否可由s2n1個字(順序不可對調)湊成s1
例如:{s1=ABCs2=AXBXC}可,但{s1=YESs2=YXyesS}不可:因找不到E
    
{s1=YESs2=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();
s2i=0~n2-1一個一個往後找:  for(i=0,j=0;  i<n2 && j<n1;  ++i)
若與s1[j]同則j+1{j0開始}      if( s2[i] == s1[j] ) ++j;
註:迴圈i>=n2j>=n1結束{ for迴圈可同時設兩個初值以逗號隔開 }
迴圈結束時若jn1則表示s1沒找完整:if(j != n1) cout <<”NO” << endl;
            否則就是可以找到:      else cout <<”YES” << endl;
    
b010: 編碼破解
讀入1個字串s{只有大寫字母}解碼印出 {每個字母往前2格,C->AD->B、…、B->ZA->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-1S的每個字元:   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的字元在電腦內部存成整數值A65 ~ Z90
例: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 意見:

張貼留言