1 输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限 2 3 比如: 4 5 输入:5 18 6 7 输出: 8 9 1 2 3 4 5 10 11 16 17 18 0 6 12 13 15 0 0 0 7 14 15 14 0 0 0 8 16 17 13 12 11 10 9 18 19 20 21 输入: 4 12 22 23 输出: 24 25 1 2 3 4 26 27 12 0 0 5 28 29 11 0 0 6 30 31 10 9 8 7 32 33 #include<stdio.h> 34 35 int main(void) 36 { 37 int n,m,i,j,temp; 38 int dir = 0; //0向右,1向下,2向左,3向上, 39 scanf("%d%d",&m,&n); 40 int arr[m][m]; 41 42 //对数组初始化 arr[m][m] = {0}编译不通过 43 for(i=0; i<m; i++) 44 { 45 for(j=0; j<m; j++) 46 { 47 arr[i][j] = 0; 48 } 49 } 50 51 i = j = 0; 52 temp = 1; 53 while(temp <= m*m) 54 { 55 if(temp > n)break; 56 arr[i][j] = temp; 57 switch(dir) 58 { 59 case 0: 60 { 61 if(j+1 == m || arr[i][j+1] > 0) 62 { 63 i++; 64 dir = 1; 65 } 66 else j++; break; 67 } 68 case 1: 69 { 70 if(i+1 == m || arr[i+1][j] > 0) 71 { 72 j--; 73 dir = 2; 74 } 75 else i++; break; 76 } 77 case 2: 78 { 79 if(j - 1 < 0 || arr[i][j-1] > 0) 80 { 81 i--; 82 dir = 3; 83 } 84 else j--; break; 85 } 86 case 3: 87 { 88 if(arr[i-1][j] > 0) 89 { 90 j++; 91 dir = 0; 92 } 93 else i--; break; 94 } 95 } 96 temp++; 97 } 98 99 //打印数组 100 for(i=0; i<m; i++) 101 { 102 for(j=0; j<m; j++) 103 { 104 printf("%3d",arr[i][j]); 105 } 106 printf("\n"); 107 } 108 return 0; 109 }
时间: 2024-10-14 00:40:29