有关于数字排列规律的题目 帮我看看怎么错了 谢谢
题目
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
n=4
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25
n=5
n=5
以上是当n=4,5排列规律 当为n时怎么编程?
我的解答:
#include<iostream>
using namespace std;
int main()
{
int a[50][50],i,j,k,b,c=0,n,d=n;
a[0][0]=1;
cin>>n;
a[n][n]=n*n;
for(k=0;k<n/2;k++)
{
for(a[i][j]=a[0][c+1],a[0][c+1]=a[0][c]+1;i<=n,j>=0;i++,j--)
{a[i+1][j-1]=a[i][j]+1;
a[i][j]=a[i+1][j-1];
b=i;
}
for(a[i][j]=a[b+1][0],a[b+1][0]=a[b][0]+1;i>=0,j<=n;i--,j++)
{a[i-1][j+1]=a[i][j]+1;
a[i][j]=a[i-1][j+1];
c=j;
}
}
for(k=0;k<n/2;k++)
{
for(a[i][j]=a[n][d-1],a[n][d-1]=a[n][d]-1;i>=0,j<=n;i--,j++)
{a[i-1][j+1]=a[i][j]-1;
a[i][j]=a[i-1][j+1];
b=i;
}
for(a[i][j]=a[b-1][n],a[b-1][n]=a[b][0]-1;j>=0,i<=n;i++,j--)
{a[i+1][j-1]=a[i][j]-1;
a[i][j]=a[i+1][j-1];
d=j;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<a[i][j]<<" ";
}
return 0;
}
出错了 不知道怎么改╮(╯▽╰)╭?求教 谢谢
[解决办法]
//可以看作是1~n,n~1的按照斜角递增递减顺序的排列//在斜角端点时控制好下一次起点坐标即可//i,j表示行列。cur表示当前斜角数列的个数//cur为奇数则是↗,否则↙void snake_arr(int n) { int a[50][50]; int i = 0,j = 0,t = 1; bool inc = true; int step = 0,cur = 1; do { a[i][j] = t++; ++step; if(step == cur) { if(cur == n) inc = false; if(inc) { if(i == 0) ++j; else if(j == 0) ++i; } else { if(j == n - 1) ++i; else if(i == n - 1) ++j; } inc ? ++cur : --cur; step = 0; } else { if(cur % 2) { --i; ++j; } else { ++i; --j; } } } while (t <= n * n); }