因此,您将获得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';
}
答案 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开始,我已在上面的代码中对其进行了修复。