一个很简单的构造方法,由于每一行和是相同的,所有我们可以先让每行的元素是一样,而后为了让每一列的和一样的,我们可以循环右移每一行的元素,例如第一行是1 2 3 4,那么第二行就是4 1 2 3,由于是矩阵那么最终每一列都会有和行一样的元素。而在这基础上,我们可以想到最简单的构造方法就是,每一行每一列都由1个k和n-1个0组成,当然下面的代码没有这么构造,但大差不差

#include<iostream>

using namespace std;

const int N=1e3+5;

int n,k;

int main()
{
    cin>>n>>k;
    if(n==1)
    {
        cout<<k;
        return 0;
    }
    int a=k%(n-1),b=k/(n-1);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i==j) cout<<a<<' ';
            else cout<<b<<' ';
        }
        cout<<endl;
    }
    return 0;
}