【回旋数字】c语言实现

昨天在看python,突然群里有人问回旋数字的算法,然后就把手头上的python丢到了一边,做起了题.(囧)

说一下我的思路吧,就是将矩阵分成若干圈,每一圈看成上下左右四个数列。

圈数以及数列长度如何确定?

很简单,圈数是n/2+n%2,数列长度是n-1-count*2(count表示的是第几圈)

下面贴上我的代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <memory.h>
 4 #define max 100
 5 int n;//给定的参数
 6 int cnt;//第几圈
 7 int all;//总圈数
 8 int len;//数列的长度
 9 int startindex;//每个数列开始的索引
10 int start;//每圈的起始数
11 int matrix[max][max];//存储数
12 
13 int main(void)
14 {
15     memset(matrix,0,sizeof(matrix));
16     scanf("%d",&n);
17     all = n/2+n%2;
18     cnt = 1;
19     start =0;
20     while (cnt<=all)
21     {
22 
23         int i;
24         len = n-1-((cnt-1)<<1);
25         //cnt++;
26         for (startindex=cnt,i=1;i<=len;i++)
27         {
28             matrix [cnt][startindex++]=start+i;
29            // printf ("%d ",matrix[cnt][startindex-1]);
30         }
31         for (startindex=cnt,i=1;i<=len;i++)
32         {
33             matrix[startindex++][n-cnt+1]=start+len+i;
34         }
35         for (startindex=n-cnt+1,i=1;i<=len;i++)
36         {
37             matrix[n-cnt+1][startindex--]=start+len*2+i;
38         }
39         for (startindex=n-cnt+1,i=1;i<=len;i++)
40         {
41             matrix[startindex--][cnt]=start+len*3+i;
42         }
43         cnt++;
44         start = start+len*4;
45     }
46     if (n%2)
47     {
48         int m=(n+1)/2;
49         matrix[m][m]=n*n;
50     }
51     int i,j;
52     for (i=1;i<=n;i++)
53     {
54         for (j=1;j<=n;j++)
55         {
56             printf("%2d ",matrix[i][j]);
57         }
58         printf("\n");
59 
60     }
61     return 0;
62 
63 }

 

posted @ 2013-07-10 10:26  lianw  阅读(969)  评论(0编辑  收藏  举报