• 蓝桥杯基础练习---矩阵乘法


    基础练习 矩阵乘法  
    时间限制:1.0s   内存限制:512.0MB
       
    锦囊1
     
    锦囊2
     
    锦囊3
     
    问题描述
      给定一个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 20
    hint:就是输入一个矩阵,让你求它的 n 次幂,一个数的快速幂知道了原理的话好像也不容易忘记了呢。。。矩阵的话,这个题目其实不需要快速幂可以做,但是快速幂的做法好像高大上一点? 做这个题目还是有收获有收获!!!
    就是用向量的方式定义矩阵 typedef vector<vector<int> > mat  ;  可以用 mat a(n, vector<int>(m))的方式定义一个n * m的矩阵,然后矩阵乘法的话就是一个三重循环就好了
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 #include<vector>
     6 using namespace std;
     7 typedef vector<int> v;
     8 typedef vector<v>mat;
     9 int n, m;
    10 
    11 
    12 //。。。以前做过的题目,现在又差不多忘光了吧。。。主要是忘记了vector的用法
    13 //vector还是要好好学一学, vector<int> v 定义一个叫v的存储整型的向量,用vector定义二维数组(矩阵的方法) vector<v> mat;
    14 //若要在定义一个向量矩阵的时候给它分配指定的空间大小的话,用 vector<vector<int> >mat(n, vector<int>(m)) 则行为n,列为m
    15 
    16 mat MAT(mat &a, mat &b){
    17     mat c(a.size(), v(b[0].size()));
    18     //c.resize(n);
    19     for(int i=0; i<n; i++){
    20         for(int j=0; j<n; j++){
    21             c[i][j]=0;
    22         }
    23     }
    24     for(int i=0; i<n; i++){
    25         for(int j=0; j<n; j++){
    26             for(int k=0; k<n; k++){
    27                 c[i][j] += a[i][k] * b[k][j];
    28             }
    29         }
    30     }
    31     return c;
    32 }
    33 mat MATRIX(mat a, int b){
    34     mat ans(n, v(n));
    35     for(int i=0; i<n; i++){
    36         ans[i][i] = 1;
    37     }
    38     while(b>0){
    39         if(b&1) ans = MAT(ans, a);
    40         a = MAT(a, a);
    41         b >>= 1;
    42     }
    43     return ans;
    44 }
    45 int main(){
    46     cin >> n >> m;
    47     mat a(n, v(n));
    48     mat ans(n, v(n));
    49     for(int i = 0; i < n; i++){
    50         for(int j = 0; j < n; j++){
    51             int x;
    52             cin >> x;
    53             a[i][j] = x;
    54         }
    55     }
    56     ans = MATRIX(a, m);
    57     for(int i=0; i<n; i++){
    58         for(int j=0; j<n; j++){
    59             cout << ans[i][j] << " ";
    60         }
    61         cout << endl;
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    HMS11.Image, TabList与Tab, Picker
    HMS10. JavaUI框架, Text, Button,TextField
    HMS09.Ability
    HMS08. 快速入门
    HMS07.应用的运行、DeBug、HiLog、HiTrace
    批量插入100万条数据
    关于ios7 UINavigationController.interactivePopGestureRecognizer手势集成
    iOS 常用框架介绍
    iOS 内存管理(转载)
    cocoapod 最新安装使用步骤
  • 原文地址:https://www.cnblogs.com/ledoc/p/7087130.html
Copyright © 2020-2023  润新知