首页 > 电脑

蓝桥杯:矩阵乘法这篇代码中,为什么要三层循环?while(k--)和把k--放在循环里面有什么区别?

更新时间2019-03-03 23:58:02

完整代码如下,第32行的while循环,为什么还要这一层循环?while(k--)和把k--放在循环里面有什么区别?


#include <iostream>

using namespace std;

long long int b[40][40];

int main() {

    int n, m;

    cin >> n >> m;

    long long int a[40][40];

    long long int t[40][40];

    for(int i = 0; i < n; i++) {

        for(int j = 0; j < n; j++) {

            cin >> a[i][j];

            t[i][j] = a[i][j];

        }

    }

    if(m == 0) {

        for(int i = 0; i < n; i++) {

            for(int j = 0; j < n; j++) {

                if(i != j) {

                    cout << 0 << " ";

                } else {

                    cout << 1 << " ";

                }

            }

            cout << endl;

        }

        return 0;

    }

    while(--m) {

        for(int i = 0; i < n; i++) {

            for(int j = 0; j < n; j++) {

                int k = n;

                while(k) {

                    b[i][j] += t[i][k-1] * a[k-1][j];

                    k--;

                }

            }

        }

        for(int i = 0; i < n; i++) {

            for(int j = 0; j < n; j++) {

                t[i][j] = b[i][j];

                b[i][j] = 0;

            }

        }

    }

    for(int i = 0; i < n; i++) {

        for(int j = 0; j < n; j++) {

            cout << t[i][j] << " ";

        }

        cout << endl;

    }

    return 0;

}


当然有区别,while(k--)k在进入循环后就减了一,后者是在循环结束后减一。k用作表达式,其值与结果有关,但是循环次数是一样的,。

上一篇:我使用的是Devc++;为什么A此处编译错误,书上是这样的

下一篇:在网上下载BIOS升级程序,工具是否打包在升级程序一体?若否,则工具如何下载?