• 基础练习: 矩阵乘法


    问题描述
      给定一个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
    思路:申请三个vector数组,c++vector优势就在于可以直接进行赋值,不再像c语言那样用两个循环进行赋值,如果幂等于0就输出单位矩阵,等于1就原样输出,大于等于2就进入循环就ok
    代码:
     1 #include<iostream>
     2 #include<windows.h>
     3 #include<vector>
     4 
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     int n,c;
    10 
    11     cin >> n >> c;
    12     vector< vector<int> > a(n, vector<int>(n, 0));
    13     vector< vector<int> > b(n, vector<int>(n, 0));
    14     vector< vector<int> > d(n, vector<int>(n, 0));
    15     if(c == 0)
    16     {
    17         for(int i = 0; i < n; i++)
    18         {
    19             for(int j = 0; j < n; j++)
    20             {
    21                 if(i == j)
    22                 {
    23                     cout << "1" << " ";
    24                 }
    25                 else
    26                 {
    27                     cout << a[i][j] << " ";
    28                 }
    29                 
    30             }
    31             cout << endl;
    32         }
    33         return 0;
    34     }
    35 
    36     for(int i = 0; i < n; i++)  //生成矩阵
    37     {
    38         for(int j = 0; j < n; j++)
    39         {
    40             cin >> a[i][j];
    41         }
    42     }
    43     b = a;  //c++优势!!
    44     if(c == 1)
    45     {
    46         for(int i = 0; i < n; i++)
    47         {
    48             for(int j = 0; j < n; j++)
    49             {
    50                 cout << b[i][j] << " ";
    51             }
    52             cout << endl;
    53         }
    54         return 0;
    55     }
    56     
    57     for(int i = 2; i <= c; i++)  //最外层循环控制幂
    58     {
    59         for(int j = 0; j < n; j++)
    60         {
    61             for(int k = 0; k < n; k++)
    62             {
    63                 int sum = 0;
    64                 for(int l = 0; l < n; l++)
    65                 {
    66                     sum += a[j][l]*b[l][k];
    67                 }
    68                 d[j][k] = sum;
    69             }
    70         }
    71         b = d;
    72     }
    73     
    74     for(int i = 0; i < n; i++)
    75     {
    76         for(int j = 0; j < n; j++)
    77         {
    78             cout << d[i][j] << " ";
    79         }
    80         cout << endl;
    81     }
    82 
    83     system("pause");
    84     return 0;
    85 }
  • 相关阅读:
    遍历卷,遍历磁盘
    宽字符
    GetSystemDirectory
    WIN32_FILE_ATTRIBUTE_DATA structure
    几条shell命令
    log4j学习(二)不同类的日志输出到不同的文件
    Java中的split和join
    如何使用socket进行java网络编程(二)
    如何使用socket进行java网络编程(一)
    log4j学习(一)最简单的例子
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12755285.html
Copyright © 2020-2023  润新知