题目大意:
给定n, m,输出一个n行m列的数组,数组元素从1到n*m,从左上角开始,按顺时针填充数组,详情见样例
输入包含多组数据,每组数据包含两个正整数n,m,不超过100
对于每组数据,输出一个n行m列的数组
Input:
1 1 2 2 3 3 2 4
Output:
1 1 2 4 3 1 2 3 8 9 4 7 6 5 1 2 3 4 8 7 6 5#include <iostream> #include <cstdio> #include <cstring> using namespace std; int a[200][200]; int main() { int n,m,k; int i,j; int sum; int p; while(~scanf("%d%d",&n,&m)) { sum=1; k=0; p=0; i=0; j=0; int N,M; N=n; M=m; memset(a,0,sizeof(a)); while(i<=(N-1)/2) { for(;j<m;j++) { a[i][j]=sum++; } j--; for(;i<n;i++) { if(a[i][j]==0)a[i][j]=sum++; } i--; while(j>=k) { if(!a[i][j])a[i][j]=sum++; j--; } j++; //cout<<i<<" "<<j<<endl; while(i>=k) { if(!a[i][j])a[i][j]=sum++; //cout<<i<<" "<<j<<endl; //cout<<a[i][j]<<endl; i--; } p++; i=p; j=p; n--; m--; k++; } for(i=0;i<N;i++) { for(j=0;j<M-1;j++) { printf("%d ",a[i][j]); } printf("%d\n",a[i][j]); } } return 0; }