蛇形矩阵
输入两个整数 nn 和 mm,输出一个 nn 行 mm 列的矩阵,将数字 11 到 n×mn×m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数 nn 和 mm。
输出格式
输出满足要求的矩阵。
矩阵占 nn 行,每行包含 mm 个空格隔开的整数。
数据范围
1≤n,m≤1001≤n,m≤100
输入样例:
3 3
输出样例:
1 2 3 8 9 4 7 6 5
//偏移量技巧
int res[100][100];
int main() {
int x, y, k, d;
int i, j;
int m, n;
cin >> m >> n;
int dx[] = { 0,1,0,-1 }, dy[] = { 1,0,-1,0 };
for (x = 0, y = 0, d = 0, k = 1; k <= m * n; k++) {
res[x][y] = k;
int a = x + dx[d], b = y + dy[d];
if (a < 0 || a >= m || b < 0 || b >= n || res[a][b]) {
d = (d + 1) % 4;
a = x + dx[d], b = y + dy[d];
}
x = a; y = b;
}
for ( i = 0; i < m; i++)
{
for ( j = 0; j < n; j++)
{
cout << res[i][j] << " ";
}
cout << endl;
}
return 0;
}
平方矩阵Ⅰ
输入整数 NN,输出一个 NN 阶的回字形二维数组。
数组的最外层为 11,次外层为 22,以此类推。
输入格式
输入包含多行,每行包含一个整数 NN。
当输入行为 N=0N=0 时,表示输入结束,且该行无需作任何处理。
输出格式
对于每个输入整数 NN,输出一个满足要求的 NN 阶二维数组。
每个数组占 NN 行,每行包含 NN 个用空格隔开的整数。
每个数组输出完毕后,输出一个空行。
数据范围
0≤N≤1000≤N≤100
输入样例:
1 2 3 4 5 0
输出样例:
#include<iostream> using namespace std; #include<algorithm> int main() { int n, i, j; while (cin >> n , n) { for ( i = 1; i <= n; i++) { for ( j = 1; j <= n; j++) { int up = i, down = n - i + 1, left = j, right = n - j + 1; cout << min(min(up, down), min(left, right)) << ' '; } cout << endl; } cout << endl; } return 0; }
1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1
平方矩阵Ⅱ
输入整数 NN,输出一个 NN 阶的二维数组。
数组的形式参照样例。
输入格式
输入包含多行,每行包含一个整数 NN。
当输入行为 N=0N=0 时,表示输入结束,且该行无需作任何处理。
输出格式
对于每个输入整数 NN,输出一个满足要求的 NN 阶二维数组。
每个数组占 NN 行,每行包含 NN 个用空格隔开的整数。
每个数组输出完毕后,输出一个空行。
数据范围
0≤N≤1000≤N≤100
输入样例:
1 2 3 4 5 0
输出样例:
1 1 2 2 1 1 2 3 2 1 2 3 2 1 1 2 3 4 2 1 2 3 3 2 1 2 4 3 2 1 1 2 3 4 5 2 1 2 3 4 3 2 1 2 3 4 3 2 1 2 5 4 3 2 1
#include<iostream>
using namespace std;
int a[100][100];
int main() {
int i, j;
int n;
while (cin >> n, n) {
for ( i = 0; i < n; i++)
{
a[i][i] = 1;
for ( j = 0; j <= i - 1; j++)
{
a[i][j] = a[i - 1][j] + 1;
}
}
for ( i = n-1; i >= 0; i--)
{
for ( j = i + 1; j <= n-1; j++)
{
a[i][j] = a[i + 1][j] + 1;
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
return 0;
}
平方矩阵Ⅲ
输入整数 NN,输出一个 NN 阶的二维数组 MM。
这个 NN 阶二维数组满足 M[i][j]=2i+jM[i][j]=2i+j。
具体形式可参考样例。
输入格式
输入包含多行,每行包含一个整数 NN。
当输入行为 N=0N=0 时,表示输入结束,且该行无需作任何处理。
输出格式
对于每个输入整数 NN,输出一个满足要求的 NN 阶二维数组。
每个数组占 NN 行,每行包含 NN 个用空格隔开的整数。
每个数组输出完毕后,输出一个空行。
数据范围
0≤N≤150≤N≤15
输入样例:
1 2 3 4 5 0
输出样例:
1 1 2 2 4 1 2 4 2 4 8 4 8 16 1 2 4 8 2 4 8 16 4 8 16 32 8 16 32 64 1 2 4 8 16 2 4 8 16 32 4 8 16 32 64 8 16 32 64 128 16 32 64 128 256
#include<iostream>
using namespace std;
int a[100][100];
int main() {
a[0][0] = 1;
int n;
int i, j;
while (cin >> n , n)
{
for ( i = 0; i < n; i++)
{
for ( j = 0; j < n; j++)
{
if (i == 0 && j > 0) a[0][j] = 2 * a[0][j - 1];
else if(i >= 1&& j >= 0)
{
a[i][j] = a[i - 1][j] * 2;
}
}
}
for ( i = 0; i < n; i++)
{
for ( j = 0; j < n; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
return 0;
}