控制台输出螺旋型数字

先上最终效果图

 

 

对输入的指定数组规模做一个螺旋型的数字输出:

假设输入3,输出如下:

1  2  3

8  9  4

7  6  5

 

 

按照这种顺序进行。

 

实现代码如下:

 1 #include <iostream>
 2 #include<iomanip>
 3 using namespace std;
 4 
 5 void inputGrid(int n,int *m)
 6 {//n表示规模,m为二维数组指针
 7     int row=0,line=0,flag=0;//row,line表示第几次行处理或列处理;
 8     int i=0,j=-1;
 9     for(int num=1;num<=n*n;)
10     {
11         if(!flag)
12         {
13             //行处理
14             int addnum;
15             if(row%2==0)addnum=1;//往前走
16             else addnum=-1;//往回走
17             int num_row=n-row;
18             while(num_row)
19             {//将本行剩余空白列全部填满
20                 num_row--;
21                 j+=addnum;
22                 *(m+n*i+j)=num;
23                 num++;
24             }
25             row++;
26             flag=1;
27 
28         }
29         else
30         {
31             //列处理
32             int addnum;
33             if(line%2==0)addnum=1;//往前走
34             else addnum=-1;//往回走
35             int num_line=n-line-1;
36             while(num_line)
37             {//将本列剩余空白项全部填满
38                 num_line--;
39                 i+=addnum;
40                 *(m+n*i+j)=num;
41                 num++;
42             }
43             line++;
44             flag=0;
45         }
46     }
47     /*for(int i=0;i<n*n;i++)
48     {
49         *(m+i)=i;
50     }*/
51 }
52 
53 int main()
54 {
55     int n=1;
56     int *m,*tm;
57     while(n!=-1)
58     {
59     cout<<"请输入回形数规模:(输入-1退出)";
60     cin>>n;
61     if(n==-1)
62         return 0;
63     m=(int *)malloc(n*n*sizeof(int));
64     inputGrid(n,m);
65     for(int i=0;i<n;i++)
66     {
67         tm=m+n*i;
68         for(int j=0;j<n;j++)
69         {
70             cout<<setw(3)<<*(tm+j)<<" ";
71         }
72         cout<<"\n";
73     }
74     }
75     //return 0;
76 }

 

 

posted @ 2010-03-11 01:48  elite_lcf  阅读(3564)  评论(22编辑  收藏  举报
知识共享许可协议
本博客采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。