2016年6月10日 星期五

台中女中b009~b010

b009: 無限猴子定理
讀入2個字串s1及s2,長度為n1、n2,問是否可由s2挑n1個字(順序不可對調)湊成s1
例如:{s1=ABC、s2=AXBXC}可,但{s1=YES、s2=YXyesS}不可:因找不到E
    
又{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 意見:

張貼留言