c 输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限 (MD花了半天时间,思路不对害死人)

  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 }



posted @ 2015-04-05 15:07  林海云  阅读(406)  评论(0编辑  收藏  举报