Home C/C++ 螺旋数组

见了一个比较有意思的C程序设计题目:

从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:
  输入数字2,则程序输出:
1 2
4 3
  输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
  输入数字4,则程序输出:
1   2   3  4
12 13  14  5
11 16  15  6
10  9   8  7

——————————————————————————–
大前提条件(即在此条件下解题)

解题所涉及的知识:结构、数组、指针、标准输入输出、文件操作(只是说最多只会涉及到这么多,此题不一定全部涉及到)

允许使用ANSI C++特性。允许使用STL类库。

 

(不允许使用MFC类库,ATL类库)

然后自己也写了一个,代码写的并不是很好,甚至有些臃肿,但是最基本的功能还是达到了,呵呵。

#include “stdio.h”
#include “stdlib.h”
int *p=NULL,n;
main()
{
    void import();
    void func();
    void exp(int *z);
    printf(“请输入数组长度:”);
    scanf(“%d”,&n);
    p=(int *)malloc(n*n*sizeof(int)+1);
    func();
    exp(p);
    system(“pause”);
}
void func()
{
    int i,j,t,m,k=1,n1=n,n2=n;
    for(i=0; i<=n*n; i++)
        *(p+i)=0;
    for(t=0,i=0,j=0,m=0; t<n*n; t++)
    {
        exp(p);
        if(k==1)
        {
            *(p+j*n+i++)=t+1;
            m++;
            if(m>=n2)
            {
                k=2;
                m=0;
                j++;
                i–;
                n1–;
                continue;
            }
        }
        if(k==2)
        {
            *(p+j*n+i)=t+1;
            m++;
            j++;
            if(m>=n1)
            {
                k=3;
                m=0;
                j–;
                i–;
                n2–;
                continue;
            }
        }
        if(k==3)
        {
            *(p+j*n+i–)=t+1;
            m++;
            if(m>=n2)
            {
                k=4;
                m=0;
                i++;
                j–;
                n1–;
                continue;
            }
        }
        if(k==4)
        {
            *(p+j*n+i)=t+1;
            m++;
            j–;
            if(m>=n1)
            {
                k=1;
                m=0;
                i++;
                j++;
                n2–;
            }
        }
    }

}
void exp(int *z)
{
    int i,j,c;
    for(c=1; c<6000; c++);
    system(“cls”);
    for(i=0,j=1; i<n*n; i++,j++)
    {
        printf(“%-4d”,*(z+i));
        if(j==n)
        {
            puts(“”);
            j=0;
        }
    }
}

运行结果:

点击查看原图

打赏
0 comment

You may also like

Leave a Comment

*

code

error: Alert: Content is protected !!