ITPub博客

首页 > > > c++ 加密问题

c++ 加密问题

作者:dav2100 时间:2019-09-26 14:38:03 0 删除 编辑

描述

让我介绍一种简单的加密方法。

假定这有N字节(1字节=8位)的数据需加密,我们将它分成M字节的组,对最后一组可能要加一些0使它具有M字节,然后我们找出M×M的矩阵(Aij),现在对每一组,假定M字节是X1,X2,…,Xm,我们使用下面的公式产生加密数据Y1,Y2,…,Ym:

Yi=(X1*Ai1)+(X2*Ai2)+…+(Xm*Aim)

i=1,2,3,…,m

输入

这儿有多个用例。

对每个用例的第一行,有两个数N和M(1≤N≤100,2≤M≤10),第二行是N个需加密的数(在0到255之间),然后的M行,每行包含M个数

,第i行上的第j个数是Aij(0≤Aij≤255),同一行上的数用空格分开。

输出

对每个用例,输出一行加密的数据,如果加密数据包含K个数,使用K-1个空格来隔开。

样例输入

4 2

1 2 3 4

0 1

1 0

1 2

1

3 1

0 1

10 10

100 100 100 100 100 100 100 100 100 100

100 100 100 100 100 100 100 100 100 100

0 1 0 0 0 0 0 0 0 0

0 0 1 0 0 0 0 0 0 0

0 0 0 1 0 0 0 0 0 0

0 0 0 0 1 0 0 0 0 0

0 0 0 0 0 1 0 0 0 0

0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 0 0 1 0 0

0 0 0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 0 0 1

样例输出

2 1 4 3

3 0

100000 100 100 100 100 100 100 100 100 100

怎么wrong 了?

代码:

#include <iostream>
using namespace std;
int main()
{
 int n,m,a[256],b[256][256],i,s[256],j,k,t;
 while(cin>>n>>m)
 { 
 memset(b,0,sizeof(b));
 memset(s,0,sizeof(s));
 memset(a,0,sizeof(a));
 for(i=0;i<n;i++)
 cin>>a[i];
 for(i=0;i<m;i++)
 for(j=0;j<m;j++)
 cin>>b[i][j];
 k=0;t=0;  //将情况分为3种情况   n>m   n<m   n==m;
 if(n>m)
 {
 for(i=n-m;i<n;i++)
 {
 for(j=n-m;j<n;j++)
 {
 b[i][j]=b[k][t++];
 }
 k++;t=0;
 }
 for(i=0;i<n;i++)
 {
 for(j=0;j<n;j++)
 {

 s[i]+=(a[j]*b[i][j]);
 }

 }
 for(i=0;i<n-1;i++)
 cout<<s[i]<<" ";
 cout<<s[i]<<endl;

 }
 else if(n<m)
 {
 for(i=0;i<m;i++)
 for(j=0;j<m;j++)
 s[i]+=(a[j]*b[i][j]);
 for(i=0;i<m-1;i++)
 cout<<s[i]<<" ";
 cout<<s[i]<<endl;

 }
 else
 {
 for(i=0;i<m;i++)
 for(j=0;j<m;j++)
 s[i]+=(a[j]*b[i][j]);
 for(i=0;i<m-1;i++)
 cout<<s[i]<<" ";
 cout<<s[i]<<endl;
 }

 }
 return 0;

}


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4479/viewspace-3158916/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: ajax刷新数据。
请登录后发表评论 登录
全部评论

注册时间:2019-10-17

  • 博文量
    176
  • 访问量
    17570