如何填充此2D数组?

时间:2018-07-14 08:00:12

标签: c++ algorithm

因此,您将获得n行和cols的2D数组,并且必须通过以下模式填充它:

f(1), f(2), …, f(n-2), f(n-1), f(n);
f(n), f(1), f(2), f(3), …, f(n-1);
f(n-1), f(n), f(1), f(2), f(3), …, f(n-2);
...
`f(2), …, f(n-2), f(n-1), f(n), f(1);`

示例

假设n=6的矩阵为:

1  2  3  4  5  6
6  1  2  3  4  5
5  6  1  2  3  4
4  5  6  1  2  3
3  4  5  6  1  2
2  3  4  5  6  1

这是我到目前为止所做的,几乎没什么,它只能解决第一行的问题。

cin>>n;
    for(i=1; i<=n; i++)
    {
        k=1;
        for(j=1; j<=n; j++)
        {
            a[1][j]=k;
            k++;
        }
    }
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<'\n';
    } 

1 个答案:

答案 0 :(得分:0)

您了解模式,在随后的每一行中,数字都是移位的。是什么阻止了您在代码中表达它?解决这些问题是编程的本质。

这是一个解决方案,还有其他解决方法,但是我希望这是最清楚的

for (int i = 0; i < 6; ++i)
{
    for (int j = 0; j < 6; ++j)
    {
        int k = j - i; // the trick!! k is shifted by value of i
        if (k < 0) // but k might now be too small, so adjust
            k += 6;
        a[i][j] = k + 1; // arrays start at zero
                         // but you wanted numbers from one, so add one here
    }
}

未经测试的代码

顺便说一句,您的代码假定数组从1开始,而不是从0开始,我已在上面的代码中对其进行了修复。