1. 程式人生 > >C語言解決摺疊加密問題

C語言解決摺疊加密問題

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為例):
在這裡插入圖片描述
以上就是關於摺疊加密問題的原始碼分享,希望業界大佬多多指教,也希望小白能夠從中受益!