C 程式練習 W的密碼 模擬題

2021-08-26 02:00:04 字數 1869 閱讀 4338

描述

加密一條資訊需要三個整數碼, k1, k2 和 k3。字元[a-i] 組成一組, [j-r] 是第二組, 其它所有字元 ([s-z] 和下劃線)組成第三組。 在資訊中屬於每組的字元將被迴圈地向左移動ki個位置。 每組中的字元只在自己組中的字元構成的串中移動。解密的過程就是每組中的字元在自己所在的組中迴圈地向右移動ki個位置。

例如對於資訊 the_quick_brown_fox 以ki 分別為 2, 3 和 1藹進行加密。加密後變成 _icuo_bfnwhoq_kxert。下圖顯示了右旋解密的過程。

觀察在組[a-i]中的字元,我們發現出現在資訊中的位置為。當k1=2右旋一次後, 上述位置中的字元變成。下表顯示了經過所有第一組字元旋轉得到的中間字串,然後是所有第二組,第三組旋轉的中間字串。在一組中變換字元將不影響其它組中字元的位置。

所有輸入字串中只包含小寫字母和下劃線(_)。所有字串最多有償服務0個字元。ki 是1-100之間的整數。

輸入輸入包括一到多組資料。每個組前面一行包括三個整數 k1, k2 和 k3,後面是一行加密資訊。輸入的最後一行是由三個0組成的。

輸出對於每組加密資料,輸出它加密前的字串。

樣例輸入

2 3 1

_icuo_bfnwhoq_kxert

1 1 1

bcalmkyzx

3 7 4

wcb_mxfep_dorul_eov_qtkrhe_ozany_dgtoh_u_eji

2 4 3

cjvdksaltbmu

0 0 0

樣例輸出

the_quick_brown_fox

abcklmxyz

the_quick_brown_fox_jumped_over_the_lazy_dog

ajsbktcludmv

分析:按題意進行模擬,先拆分密碼再組裝明文。此題比較簡單,注意某組沒有元素時,容易導致re。re時,應當首先檢查此種情況。

//冰非寒([email protected]) // 252kb 0ms 1950 b g++ #include #include #include using namespace std; int const n = 200; struct map; class plaintext; plaintext::plaintext(const int k1,const int k2,const int k3) void plaintext::decrypt(const string cipher) if(cipher[i] >= 'j' && cipher[i] <= 'r') int j = map[2].k; map[2].value[j] = cipher[i]; map[2].address[j] = i; map[2].k ++; } rightmove(map[0],key_1); rightmove(map[1],key_2); rightmove(map[2],key_3); //text is made up text = cipher; for(int i(0);i < 3;++ i) } } void plaintext::rightmove(map &m,int n) int t = n % m.k; char temp1[n]; char temp2[n]; if(0 == t) m.value[m.k] = '\0'; strncpy(temp1,m.value,m.k - t); temp1[m.k - t] = '\0'; strncpy(temp2,m.value + m.k - t,t); temp2[t] = '\0'; strcat(temp2,temp1); strcpy(m.value,temp2); } void plaintext::print() cin>>cipher; plaintext ptext(k1,k2,k3); ptext.decrypt(cipher); ptext.print(); } return 0; }

C語言的模擬練習(4)

程式 include include 完成猜數字遊戲 void chaishuzi else if value 0 else else if key printf 大了!n else 寫 可以在整型有序陣列中查詢想要到數字,找到了返回下標,找不到返回 1 折半查詢 int baniry sort i...

2014普及組模擬題 小X的密碼破譯

這天小 y 有事外出,小 x 又忘記帶電腦了,於是想使用小 y 的電腦。不幸的是,小 y 設了密碼,密碼提示是四個整數,且輸錯後密碼和提示就會重新生成。正當小 x 一籌莫展的時候,他開啟小 y 的抽屜,發現裡面有一張小紙條,上面寫著 給出提示 n,a,b,c,令 di ai2 bi c mod 11...

題解 NOIP模擬題 我要的幸福 C

思路先從 n,m 出發搜一遍,如果最後 1,1 沒有被標記,那麼這組資料是無解的。如果有解,搜完一遍之後利用標記,用貪心輸出。其他的就很簡單了。1 include2 using namespace std 3int a 1010 1010 n,m 4bool vis 1010 1010 5 inli...