螺旋填数
题目描述:
创建一个m行n列的数组,将1—m*n的数字螺旋填入
方向为右下左上
输入说明:
输入正整数m和n,以空格分隔
输出说明:
输出填好的数组,数组元素之间用空格分隔,数组每行之间以换行分隔
输入示例:
4 5
输出示例:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
#include<stdio.h>
int main()
{
int m,n,x=0,y=0,c=1;
scanf("%d %d",&m,&n);
int a[m+1][n+1]={0};
a[x][y]=1;
while(c!=m*n){
while(y+1<n&&!a[x][y+1]) a[x][++y]=++c;
while(x+1<m&&!a[x+1][y]) a[++x][y]=++c;
while(y-1>=0&&!a[x][y-1]) a[x][--y]=++c;
while(x-1>=0&&!a[x-1][y]) a[--x][y]=++c;
}
for(x=0;x<m;x++){
for(y=0;y<n;y++)
printf("%3d", a[x][y]);
printf("\n");
}
}
test1:
4 5
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
test2:
6 4
1 2 3 4
16 17 18 5
15 24 19 6
14 23 20 7
13 22 21 8
12 11 10 9
#include<stdio.h>
int main(void){
int m,n,i,j;
int array[100][100];
int num=1;//打印数
int iStart,iEnd,jStart,jEnd;
scanf("%d%d",&m,&n);
iStart=0;
iEnd=m-1;
jStart=0;
jEnd=n-1;
while(iEnd>=iStart&&jEnd>=jStart){
//上面的行
for(j=jStart;j<=jEnd;j++){
array[iStart][j]=num;
num++;
}
iStart++;
//右边的列
for(i=iStart;i<=iEnd;i++){
array[i][jEnd]=num;
num++;
}
jEnd--;
//下面的行
if(iEnd>=iStart){
for(j=jEnd;j>=jStart;j--){
array[iEnd][j]=num;
num++;
}
iEnd--;
}
//左边的列
if(jEnd>=jStart){
for(i=iEnd;i>=iStart;i--){
array[i][jStart]=num;
num++;
}
jStart++;
}
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d ",array[i][j]);
}
printf("\n");
}
return 0;
}