我想获得这个数字模式
shp
但我无法弄清楚如何制作它,任何建议如何制作该模式?
到目前为止我的代码:
Input: 7
Output:
1 1 1 1 1 1 1
1 2 2 2 2 2 1
1 2 3 3 3 2 1
1 2 3 4 3 2 1
1 2 3 3 3 2 1
1 2 2 2 2 2 1
1 1 1 1 1 1 1
到目前为止的输出是
int n, temp1, temp2,i,j;
cin >> n;
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++) {
temp1 = j;
temp2 = n-j+1;
if (temp1 < temp2) cout << temp1;
else cout << temp2;
}
cout << endl;
}
提前致谢。
答案 0 :(得分:1)
我希望这段代码(工作)可以让您更好地了解实现。
int main() {
int n;
cin >> n;
int arr[n][n];
//Numbers in the grid vary from 1 - (n/2 + 1)
for(int i = 0; i <= n / 2; i++) {
//Start filling the array in squares
//Like fill the outer square with 1 first followed by 2...
for(int j = i; j < n - i; j++) {
arr[i][j] = i + 1;
arr[n - 1 - i][j] = i + 1;
arr[j][i] = i + 1;
arr[j][n - 1 - i] = i + 1;
}
}
答案 1 :(得分:1)
解决问题的主要方法是将此方块划分为4个象限:
---n--> 111|222 | 111|222 | 111|222 | ------- n 333|444 | 333|444 | 333|444 v
每个象限都可以显示限制:
1 - row <= (n + 1) / 2 && column <= (n + 1) / 2
2 - row <= (n + 1) / 2 && column > (n + 1) / 2
3 - row > (n + 1) / 2 && column <= (n + 1) / 2
4 - row > (n + 1) / 2 && column > (n + 1) / 2
然后每个象限必须分成两个切片
\ | / \ | / \|/ ------- /|\ / | \ / | \
这些对角线可用方程式描述:
column_index = row_index
column_index = (n + 1) - row_index
现在你只需检查当前的电池是否正常。在一个对角线之下或之上,并相应地使用行或列索引。当然,如果行或列索引大于(n + 1)/ 2,则必须通过从n中减去它来进行调整。
如果您理解这一点,编写自己的代码应该不是问题。如果您必须立即打印所有内容而不将其存储在某种阵列中,这是个好主意。如果你可以使用数组,那么@baymaxx解决方案会更加清晰。
如果您想比较您的实施,那么这是我的代码:
#include <iostream>
int main() {
int n;
std::cin >> n;
for (int row_index = 1; row_index <= n; row_index++) {
for (int column_index = 1; column_index <= n; column_index++) {
if (row_index <= (n + 1) / 2 && column_index <= (n + 1) / 2) {
if (column_index < row_index) {
std::cout << column_index << " ";
} else {
std::cout << row_index << " ";
}
} else if (row_index <= (n + 1) / 2 && column_index > (n + 1) / 2) {
if (column_index < (n + 1) - row_index) {
std::cout << row_index << " ";
} else {
std::cout << (n + 1) - column_index << " ";
}
} else if (row_index > (n + 1) / 2 && column_index <= (n + 1) / 2) {
if (column_index < (n + 1) - row_index) {
std::cout << column_index << " ";
} else {
std::cout << (n + 1) - row_index << " ";
}
} else {
if (column_index > row_index) {
std::cout << (n + 1) - column_index << " ";
} else {
std::cout << (n + 1) - row_index << " ";
}
}
}
std::cout << "\n";
}
}