创建数字模式

时间:2016-11-16 17:20:37

标签: c++

我想获得这个数字模式

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;
}

提前致谢。

2 个答案:

答案 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";
    }
}