题目地址:
https://www.acwing.com/problem/content/757/
输入整数 N N N,输出一个 N N N阶的二维数组 M M M。这个 N N N阶二维数组满足 M [ i ] [ j ] = 2 i + j M[i][j]=2^{i+j} M[i][j]=2i+j。
输入格式:
输入包含多行,每行包含一个整数
N
N
N。当输入行为
N
=
0
N=0
N=0时,表示输入结束,且该行无需作任何处理。
输出格式:
对于每个输入整数
N
N
N,输出一个满足要求的
N
N
N阶二维数组。每个数组占
N
N
N行,每行包含
N
N
N个用空格隔开的整数。每个数组输出完毕后,输出一个空行。
数据范围:
0
≤
N
≤
15
0≤N≤15
0≤N≤15
代码如下:
#include <iostream>
using namespace std;
const int N = 110;
int a[N][N];
int main() {
a[0][0] = 1;
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
if (i > 0) a[i][j] = a[j][i] = a[i - 1][j] << 1;
else if (j > 0) a[i][j] = a[i][j - 1] << 1;
int n;
while (cin >> n, n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
printf("%d ", a[i][j]);
puts("");
}
puts("");
}
return 0;
}
每组数据时间复杂度 O ( n 2 ) O(n^2) O(n2),空间总共 O ( n 2 ) O(n^2) O(n2)。