藍橋杯(水題) 密碼

2021-06-29 14:44:50 字數 1596 閱讀 4670

一種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,右對齊 樣例輸入 乙...