1、MT1217矩阵乘法
输入3X4整型矩阵A和4X3的整型矩阵B,计算A*B,放到矩阵C里面,输出矩阵C。
格式
输入格式:
分两行输入两个矩阵,空格分隔。
输出格式:
按矩阵形式输出,整型,每个数字占3列,空格分隔。
样例 1
输入:
3 0 0 7 0 0 0 -1 0 2 0 0 4 1 0 0 1 -1 0 2 1 0 2 1
输出:
12 17 70 -2 -10 2 -2
分析过程
本题的要点在于矩阵乘法如何计算,这就考验线性代数学的咋样了。
对于3X4整型矩阵A和4X3的整型矩阵B的乘积,以样例1为例,说明计算过程:
3X4整型矩阵A:
3 0 0 7
0 0 0 -1
0 2 0 0
4X3的整型矩阵B:
4 1 0
0 1 -1
0 2 1
0 2 1
这两个矩阵相乘,最终得到的结果是3*3的矩阵,计算过程如下:
首先结果矩阵C的第一个值为矩阵A的第一行乘以矩阵B的第二行,依次相乘然后相加。
*
在此样例中,就是3*4+0*0+0*0+7*0=12,即矩阵C的第一个元素为12。
矩阵C的第一行第二个值为矩阵A的第一行乘以矩阵B的第二列,
*
即3*1+0*1+0*2+7*2=17,依次向下即可。
按照这个解决思路,写下代码:
实现代码
#include<bits/stdc++.h> using namespace std;int main( )
{int A[3][4]={0},B[4][3]={0},C[3][3]={0};for(int i=0;i<3;i++){for(int j=0;j<4;j++){cin >> A[i][j];}}for(int i=0;i<4;i++){for(int j=0;j<3;j++) cin >> B[i][j];}
/*这里就是矩阵的乘法的代码,这里用到了三重循环,因为矩阵C是3*3矩阵,而A是3*4矩阵,B是4*3矩阵,所以循环条件有三个,3,3,4,按照这个写下如下代码*/for(int i=0;i<3;i++){for(int j=0;j<3;j++){for(int z=0;z<4;z++){C[i][j]+=A[i][z]*B[z][j];}}} for(int i=0;i<3;i++){for(int j=0;j<3;j++) printf("%3d ",C[i][j]) ;cout << "\n";}return 0;
}
下面这个是参考别人的代码, 这个代码没有将相乘得到的值存入矩阵C中,而是直接输出,所以,在输出的时候需要设置一个计数器,当计数到3的倍数的时候,换行。其余的与上面的思想是一样的。
#include<bits/stdc++.h> using namespace std;int main( )
{int A[100][100],B[100][100],cnt,ans;for(int i=1;i<=3;i++){for(int j=1;j<=4;j++){cin >> A[i][j];}}for(int i=1;i<=4;i++){for(int j=1;j<=3;j++) cin >> B[i][j];}cnt=1;for(int i=1;i<=3;i++){for(int k=1;k<=3;k++){ans=0;for(int j=1;j<=4;j++) ans+=A[i][j] * B[j][k];printf("%3d ",ans);if(cnt%3==0) printf("\n");cnt++;}}return 0;
}
2、MT1219斐波那契数列II
判断数字N(N<2929)是否为斐波那契数列中出现的数,输出YES或者NO。
格式
输入格式:
输入整型
输出格式:
输出YES或者NO
样例 1
输入:
5
输出:
YES
相关知识点
斐波那契数列指的是这样的一个数列:1、1、2、3、5、8、13、21、34、……,这个数列从第 3 项开始,每一项都等于前面两项之和。
实现代码
#include<bits/stdc++.h> using namespace std;int judge(int n){//此函数用于计算斐波那契数列的值int f1 = 1;int f2 = 1;int fn;if(n==0){return 0;}else{for(int i=1;i<=n;i++){fn=f1+f2;f1=f2;f2=fn;}return f1;}
}
int main( )
{int n;cin >> n;for(int i=1;i<=n;i++){if(n==judge(i)){cout << "YES";return 0;}}cout << "NO";return 0;
}
明天继续吧。