一種playfair密碼變種加密方法如下:首先選擇乙個金鑰單詞(稱為pair)(字母不重複,且都為小寫字母),然後與字母表中其他字母一起填入至乙個5x5的方陣中,填入方法如下:
1.首先按行填入金鑰串。
2.緊接其後,按字母序按行填入不在金鑰串中的字母。
3.由於方陣中只有25個位置,最後剩下的那個字母則不需變換。
如果金鑰為youandme,則該方陣如下:
y o u a n
d m e b c
f g h i j
k l p q r
s t v w x
在加密一對字母時,如am,在方陣中找到以這兩個字母為頂點的矩形:
o u a
m e b
這對字母的加密字母為該矩形的另一對頂點,如本例中為ob。
請設計程式,使用上述方法對輸入串進行加密,並輸出加密後的串。
另外有如下規定:
1、一對一對取字母,如果最後只剩下乙個字母,則不變換,直接放入加密串中;
2、如果一對字母中的兩個字母相同,則不變換,直接放入加密串中;
3、如果一對字母中有乙個字母不在正方形中,則不變換,直接放入加密串中;
4、如果字母對出現在方陣中的同一行或同一列,如df或hi,則只需簡單對調這兩個字母,即變換為fd或ih;
5、如果在正方形中能夠找到以字母對為頂點的矩形,假如字母對為am,則該矩形的另一對頂點字母中,與a同行的字母應在前面,在上例中應是ob;同樣若待變換的字母對為ta,則變換後的字母對應為wo;
6、本程式中輸入串均為小寫字母,並不含標點、空格或其它字元。
解密方法與加密相同,即對加密後的字串再加密,將得到原始串。
要求輸入形式如下:
從控制台輸入兩行字串,第一行為金鑰單詞(長度小於等於25),第二行為待加密字串(長度小於等於50),兩行字串末尾都有乙個回車換行符,並且兩行字串均為小寫字母,不含其它字元。
在標準輸出上輸出加密後的字串。
例如,若輸入:
youandme
welcometohangzhou
則表示輸入的金鑰單詞為youandme,形成的正方形如上所示;待加密字串為welcometohangzhou。在正方形中可以找到以第一對字母we為頂點的矩形,對應另一對頂點字母為vb,因此加密後為vb,同理可找到與字母對lc,et,oh,ho對應的頂點字母對。而字母對om位於上述正方形中的同一列,所以直接以顛倒這兩個字母來加密,即為mo,字母對an同理。字母對gz中的z不在上述正方形中,因此原樣放到加密串中。最後剩乙個字母u也原樣輸出。
因此輸出的結果為:
vbrmmomvugnagzguu
題目都說明了,簡單按照實現就好了。。。
#include #include#include using namespace std;
int main ()
}if(temp) break;
} count=0;
int y=j;
for(int x=i;x<5;x++)
y=0;
} string ss,res="";//res記錄結果,ss為第二行字串
cin>>ss;
len=ss.length(),i=0;
while(i
藍橋杯 回文數字 水題
歷屆試題 回文數字 時間限制 1.0s 記憶體限制 256.0mb 問題描述 觀察數字 12321,123321 都有乙個共同的特徵,無論從左到右讀還是從右向左讀,都是相同的。這樣的數字叫做 回文數字。本題要求你找到一些5位或6位的十進位制數字。滿足如下要求 該數字的各個數字之和等於輸入的整數。輸入...
藍橋杯 分糖果(水題)
歷屆試題 分糖果 時間限制 1.0s 記憶體限制 256.0mb 問題描述 有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲 每個小朋友都把自己的糖果分一半給左手邊的孩子。一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。反覆進行這個遊戲,直到所有小朋友的糖...
藍橋杯 求指數(水題)
演算法訓練 5 2求指數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 已知n和m,列印n 1,n 2,n m。要求用靜態變數實現。n m表示n的m次方。已知n和m,列印n 1,n 2,n m。要求用靜態變數實現。n m表示n的m次方。每行顯示5個數,每個數寬為12,右對齊 樣例輸入 乙...