旋转数阵

Description
把1到n2的正整数从左上角开始由外层至中心按照顺时针方向螺旋排列
Input
输入整数n (1 <= n <= 10)
Output
按示例输出矩阵
Sample Input
3
4
Sample Output
1 2 3
8 9 4
7 6 5
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
C语言版本一

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	int m,n;
	int a[10][10];
	
	int i,j;
	
while(scanf("%d",&n)!=EOF&&n<=20)
	
//	while(scanf("%d %d",&n,&m)!=EOF&&n<=20&&m<=20) 
{	m=n;
		int count=1;
		int left,right,up,down;
		left=m;
		right=-1;
		up=0;
		down=n;
		int head;
		head=1;
		i=0;
		j=0;
		
	while(count<=n*m){
		if(head==1)
		{	
			a[i][j++]=count++;
			if(j==left){
					head=2;
				left-=1;
				j--;
				i++;
			}
		}
		else if(head==2)
		{
			a[i++][j]=count++;
			if(i==down){
					head=3;
				down-=1;
				i--;
				j--; 
			}
		}
			else if(head==3)
		{
			
			a[i][j--]=count++;
			if(j==right){
					head=4;
				right+=1;
				j++;
				i--;
			}
		}
			else
		{
			a[i--][j]=count++;
			if(i==up){
					head=1;
				up+=1;
				i++;
				j++;
			}
			
		}
		
	} 
		
		if(n<=3){
			for(i=0;i<=n-1;i++){		
			for(j=0;j<=m-2;j++){
			printf("%-2d",a[i][j]);
			}
			printf("%d\n",a[i][j]);
			}
		}else if(n==10){
			for(i=0;i<=n-1;i++){		
			for(j=0;j<=m-2;j++){
			printf("%3d ",a[i][j]);
			}
			printf("%3d\n",a[i][j]);
			}
	
		}else{
		for(i=0;i<=n-1;i++){		
			for(j=0;j<=m-2;j++){
			printf("%2d ",a[i][j]);
			}
			printf("%2d\n",a[i][j]);
			}
}
}
	
	return 0;
}

C语言版本二

#include<stdio.h>
int main() {
	int n, m, i, q, o, a[99][99];
	while (scanf("%d%d", &n, &m) != EOF) {
		if (m*n == 0)continue;
		for (i = 1; i <= n; i++)
			for (o = 1; o <= m; o++)
				a[i][o] = 0; 
				q = o = 0; 
				i = 1;
		while (q < m * n) {
			for (o++; ; o++) { if (a[i][o] != 0||o>m) { o--; break; }q++; a[i][o] = q; }
			for (i++; ; i++) { if (a[i][o] != 0||i>n) { i--; break; }q++; a[i][o] = q; }
			for (o--; ; o--) { if (a[i][o] != 0||o<1) { o++; break; }q++; a[i][o] = q; }
			for (i--; ; i--) { if (a[i][o] != 0||i<1) { i++; break; }q++; a[i][o] = q; }
		}
			for (o = 1; o <= n; o++) {
				for (i = 1; i <= m; i++){
					printf("%2d", a[o][i]);
					if (i != m)printf(" ");
				}	 printf("\n");}
		
	}return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务