举个例子:单词DIJSTRA,替换字母得到DIISTRA;将DIISTRA填入矩阵得到的密码表为(注意第二个I被略过了):
DISTR
A….
…..
…..
…..
最后将剩余字母填入,得到密码表:
DISTR
ABCEF
GHKLM
NOPQU
VWXYZ
给定作为密钥的单词,你能求出密码表吗?
输入
第1行:一行字符串,只包含大写字母,长度不超过200
输出
共5行,每行5个字母,表示密码表。
样例输入
HIHOCODER
样例输出
HIOCD
ERABF
GKLMN
PQSTU
VWXYZ
解题代码如下:
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
| #include<iostream> #include<string>
using namespace std;
char matrix[25]; int visited[25];
int main() { string key;
while(cin >> key){ int position = 0; int skip = 'J' - 'A';
for(int i = 0 ;i < 25 ; i ++ ){ visited[i] = 0; }
int index = 0; int character_index = 0;
for(index = 0 ; index < key.size() ; index ++){ if(key[index] == 'J'){ key[index] = 'I'; } }
index = 0;
while( index < key.size() ){ char target = key[index]; if( !visited[target-'A'] ){ matrix[position%25] = target; visited[target-'A'] = 1; position ++; } index ++; }
for(int i = 0 ; i < 26 && position < 25 ; i ++ ){ if(i==skip){ continue; } if(!visited[i]){ matrix[position++] = 'A'+i; } }
for(int i = 0 ; i < 25 ; i ++){ cout<<matrix[i]; if( (i+1) % 5 == 0){ cout<<endl; } } }
return 0; }
|