假期刷题打卡--Day27

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   7
  0  -2  -1
  0   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的第二行,依次相乘然后相加。

假期刷题打卡--Day27_第1张图片 *    

在此样例中,就是3*4+0*0+0*0+7*0=12,即矩阵C的第一个元素为12。

矩阵C的第一行第二个值为矩阵A的第一行乘以矩阵B的第二列,

假期刷题打卡--Day27_第2张图片  *    

即3*1+0*1+0*2+7*2=17,依次向下即可。

按照这个解决思路,写下代码:

实现代码
#include 

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 

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 

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;
}

 

明天继续吧。

你可能感兴趣的:(假期打卡学习,c++,c语言)