C++ ① B = k * E ② 循环矩阵,每一行移一位

#include <iostream>
using namespace std;

int main() {
    int n, k;
    // 严格来说,一行/列不能出现重复元素,但题目未要求
    // 仅要求所有元素都是非负整数 -- B = k * E
    cin >> n >> k;
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
            if (i==j) cout << k << ' ';
            else cout << 0 << ' ';
        }
        cout << endl;
    }    
}
// 64 位输出请用 printf("%lld")

② 适合求解:每个元素为正整数,且每一行/列不出现相同元素 要求 n(n+1)/2 <= k;但本题不要求

#include <iostream>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    int e1=k/n, e2=e1+k%n;
    for (int i=0; i<n; i++) {
        for (int j=0; j<n-i-1; j++) {
            cout << e1 << ' ';
        }
        cout << e2 << ' ';
        for (int j=n-i; j<n; j++) {
            cout << e1 << ' ';
        }
        cout << endl;
    }    
}
// 64 位输出请用 printf("%lld")