标签:
时间限制:1.0s 内存限制:512.0MB
问题描述:给定一个N阶矩阵A,输出A的M次幂(M是非负整数),例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
输入格式:第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
输出格式:输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
2 2
1 2
3 4
样例输出
7 10
15 22
代码如下:
#include <stdio.h>
#include <stdlib.h>
void calende();
int line,mi;
int jc[30][30]={0};
int jce[30][30]={0};
int jcen[30][30]={0};
int main()
{
int i,j;
scanf("%d %d",&line,&mi);
for(i=0;i<line;i++)
{
for(j=0;j<line;j++)
{
scanf("%d",&jc[i][j]);
jce[i][j]=jc[i][j];
}
}
if(mi==0)
for(i=0;i<line;i++)
{
jcen[i][i]=1;
}
calende();
return 0;
}
void calende()
{
int i,j,z,d;
for(i=2;i<=mi;i++)//幂
{
for(j=0;j<line;j++)//遍历行
{
for(z=0;z<line;z++)//遍历列
{
for(d=0;d<line;d++)
{
jcen[j][z]+=jce[j][d]*jc[d][z];
}
}
}
if(i==mi)break;
for(j=0;j<line;j++)//遍历行
{
for(z=0;z<line;z++)//遍历列
{
jce[j][z]=jcen[j][z];
jcen[j][z]=0;
}
}
}
if(mi==1||mi==0)
{
for(j=0;j<line;j++)//遍历行
{
for(z=0;z<line;z++)//遍历列
{
if(mi==1)
printf("%d ",jc[j][z]);
else
printf("%d ",jcen[j][z]);
}
printf("\n");
}
}
else
{
for(j=0;j<line;j++)//遍历行
{
for(z=0;z<line;z++)//遍历列
{
jce[j][z]=jcen[j][z];
jcen[j][z]=0;
printf("%d ",jce[j][z]);
}
printf("\n");
}
}
}
#include <iostream>
using namespace std;
void calende();
void show();
void getinfo(int **);
void getinfo1(int **);
void cleanms(int **);
void cleanms1(int **);
int line,mi;
int **jc=NULL;
int **jce=NULL;
int **jcen=NULL;
int main()
{
int i,j;
cin>>line>>mi;
getinfo1(jc);
getinfo1(jce);
getinfo1(jcen);
for(i=0;i<line;i++)
{
for(j=0;j<line;j++)
{
cin>>jc[i][j];
}
}
for (int z = 0; z < line; z++)
{
jce[z][z] = 1;
}
calende();
show();
cleanms1(jc);
cleanms1(jce);
cleanms1(jcen);
return 0;
}
void calende()
{
for (int i = 0; i < mi; i++)
{
for (int j = 0; j < line; j++)
{
for (int j2 = 0; j2 < line; j2++)
{
for (int k = 0; k < line; k++)
{
jcen[j][j2] += jce[j][k] * jc[k][j2];
}
}
}
for (int j = 0; j < line; j++)
{
for (int j2 = 0; j2 < line; j2++)
{
jce[j][j2] = jcen[j][j2];
jcen[j][j2]=0;
}
}
}
}
void show()
{
for (int i = 0; i < line; i++)
{
for (int j = 0; j < line; j++)
{
cout<<jce[i][j]<<" ";
}
cout<<endl;
}
}
void getinfo(int **p)//内存不连续
{
p=new int*[line];
for(int i=0;i<line;i++)
{
p[i]=new int[line];
}
}
void getinfo1(int **a)//保证内存的连续性
{
a = new int* [line];
a[0] = new int[line * line];
for(int i=1; i<line; i++)
{
a[i] = a[i-1] + line;
}
}
void cleanms(int **p)
{
for(int i=0; i<line; i++)
delete[] p[i];
delete[] p;
}
void cleanms1(int **a)
{
delete[] a[0];
delete[] a;
}
(全文完)
标签:
原文地址:http://blog.csdn.net/confidence_surmount/article/details/45064969