所以数字模式是这样的:



Input    : 2
Output   :
            0  0  0  1  0   0  0
            0  0  2  0  12  0  0
            0  3  0  0  0   11 0
            4  0  0  0  0   0  10
            0  5  0  0  0   9  0
            0  0  6  0  8   0  0
            0  0  0  7  0   0  0


我已经使用通常的方法解决了它,但是当我尝试使用数组时,输出确实混乱了。有什么建议如何使这个数字模式与数组?

这是我的代码,创建此数字模式:

int input, n, mid, i, j;
cin >> input;

n = (2*input)+3;
mid = (n+1)/2;

for(i = 1; i <= n; i++) {
    for (j = 1; j <= mid; j++) {
        if (i <= mid && j == mid-i+1) cout << i << " ";
        else if (i > mid && j == mid-n+i) cout << i << " ";
        else cout << "0 ";
    }
    for (j = mid+1; j <= n; j++) {
        if (i >= mid && j == n+mid-i) cout << (2*n-i) << " ";
        else if (i < mid && j == mid+i-1) cout << (2*n-i) << " ";
        else cout << "0 ";
    }
    cout << endl;
}


提前致谢。

最佳答案

我认为此代码(有效)可能会对您有所帮助。

#include<iostream>
#include<stdio.h>
#include<string.h>

using namespace std;

int main() {

   int input, n, mid, i, j;
   cin >> input;

   n = (2*input)+3;
   mid = (n+1)/2;

   int arr[n][n];
   memset(arr, 0, sizeof(arr));

   for(i = 1; i <= n; i++) {
     for (j = 1; j <= mid; j++) {
        if (i <= mid && j == mid-i+1) arr[i - 1][j - 1] = i;
        else if (i > mid && j == mid-n+i) arr[i - 1][j - 1] = i;
   }
   for (j = mid+1; j <= n; j++) {
      if (i >= mid && j == n+mid-i) arr[i - 1][j - 1] = 2 * n - i;
      else if (i < mid && j == mid+i-1) arr[i - 1][j - 1] = 2 * n - i;
   }
}


}

08-16 09:36