2045:【例5.13】蛇形填数时间限制: 1000 ms 内存限制: 65536 KB 提交数: 14756 通过数: 8191 【题目描述】在n×n方阵里填入1,2,3,…,n×n,要求填成蛇形。例如n=4时方阵为: 10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
其中,n≤20。 【输入】输入n。 【输出】输出题述方阵。n行,每行各数之间用一个空格隔开。 【输入样例】4 【输出样例】10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4 想法是中级的想法,把它放在中级中了,哈哈…… |
教学备忘录:编辑 |
#include<iostream> #include<cmath> #include<cstring> int a[25][25]; using namespace std; int main() { int i,m,l,n,j; int k=1,x,o,p; scanf("%d",&n); for(j=n-1,x=0;x<=j;j--){//从右上角开始,j是列,x为行,列向左移动,最初循环第一圈 for(i=x;i<=j;i++)//从上到下的右边,i为行,j是右边的列 a[i][j]=k++; for(l=i-1,p=j-1;p>=x;p--)//从右到左的下边,l是行,不变;p从向左一列开始,依次减1; a[l][p]=k++; for(m=l-1,p=p+1;m>=x;m--)//从下向上的左边,m是行,在原行的基础上减1,依次减1; a[m][p]=k++; x++; for(i=m+1,p=p+1;p<=j-1;p++)//从左向右的上边,i是行,不变,列加1后,再向右依次加1; a[i][p]=k++; } for(i=0;i<n;i++){//输出数组中的值 for(j=0;j<n;j++) printf("%d ",a[i][j]); printf("\n");} return 0; } |