C語言解決摺疊加密問題
阿新 • • 發佈:2018-12-22
C語言解決摺疊加密問題
題目
給一個長度為 的字元陣列和一個長度為k的01陣列req,根據要求編寫摺疊加密和解密的演算法。
摺疊加密方法舉例:
reg[i]=0,表示從左到右摺疊
a b c d e f g h 摺疊加密後 d c b a
e f g h
d c b a 摺疊加密後 f e
e f g h c d
b a
g h
reg[i]=1,表示從右到左摺疊
a b c d e f g h 摺疊加密後 h g f e
a b c d
f e 摺疊加密後 h
c d a
b a d
g h e
f
c
b
g
原始碼分享如下:
#include <stdio.h> #include <string.h> int main() { int a,n,b=1,c=2,m,p; char str[50];//存字元 char stn[50];//存K printf("請輸入祕鑰:"); scanf("%s",str); printf("請輸入k:"); scanf("%s",stn); n=strlen(str);//計算字元長度 p=n; m=strlen(stn);//計算K的長度 char k[n][n];//n維陣列 用來存結果 for(a=0;a<n;a++) for(int l=0;l<n;l++) k[a][l]=0; for(a=0;a<n;a++) k[n-1][a]=str[a]; for(int j=0;j<m;j++) { int d=0; if(stn[j]=='1') //為1 的時候 { for(int l=0;l<b;l++) { for(int i=p/2;i<p;i++) { k[n-c+d][p-i-1]=k[n-1-d][i]; k[n-1-d][i]=0; } d++; } } else // 為0 的時候 { for(int l=0;l<b;l++) { for(int i=0;i<p/2;i++) { k[n-c+d][p/2-i-1]=k[n-1-d][i]; k[n-1-d][i]=k[n-1-d][p/2+i]; k[n-1-d][p/2+i]=0; } d++; } } p=p/2; b*=2; c*=2; printf("第%d次加密後為:\n", j+1); for(int i=n-b;i<n;i++) { printf("\t\t%s",k[i]); printf("\n"); } } return 0; }
執行結果(以abcdefgh為例):
以上就是關於摺疊加密問題的原始碼分享,希望業界大佬多多指教,也希望小白能夠從中受益!