描述
让我介绍一种简单的加密方法。
假定这有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/ ,如需转载,请注明出处,否则将追究法律责任。