标签:
时间限制: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