• 基于Visual C++2012拆解世界五百强面试题--题3


    请用C语言实现 输入N,打印N*N矩阵

    比如 N = 3, 打印:

    1 2 3

    8 9 4

    7 6 5

    N = 4, 打印

    1   2    3   4

    12  13   14  5

    11  16   15  6

    10  9    8   7

    启动2012

     

    输出结果

    #include <stdio.h>
    #include <stdlib.h>
    
    #define M 5
    int arr[M][M] = { 0 }; //初始化数组全0 ,用0来判断数组是否赋有正确的值
    
    void HuiJu(void);   //矩阵赋值函数
    void ShowArr(void); //输出矩阵
    
    int main()
    {
        HuiJu();
        ShowArr();
    
        system("pause");
        return 0;
    }
    
    void ShowArr(void)
    {
        int i = 0;
        int j = 0;
        for (i = 0; i < M; i++)
        {
            for (j = 0; j < M; j++)
            {
                printf("%d	", arr[i][j]);
            }
            printf("
    ");
        }
    }
    
    void HuiJu(void)
    {
        int i = 0; //数组索引
        int j = 0; //数组索引
        int direc = 1; //方向控制
        int num = 1; //给数组进行赋值的变量
    
        while (num <= M*M)//对矩阵循环赋值
        {
            switch (direc)
            {
            case 1:     //从左到右
                while (arr[i][j] == 0 && j < M) //数组值为0以及索引j没有越界时进行
                {
                    arr[i][j] = num;
                    num++;
                    j++; //i不变 j递增
                }
                j--; //改变索引为下一个变量的索引
                i++; //改变索引为下一个变量的索引
                direc = 2;//把方向从左到右改变为从上到下
                break;
    
            case 2:     //从上到下
                while (arr[i][j] == 0 && i < M)//数组值为0以及索引i没有越界时进行
                {
                    arr[i][j] = num;
                    num++;
                    i++; //j不变 i递增
                }
                i--; //改变索引为下一个变量的索引
                j--; //改变索引为下一个变量的索引
                direc = 3;//把方向从上到下改变为从右到左
                break;
    
            case 3:     //从右到左
                while (arr[i][j] == 0 && j >= 0)//数组值为0以及索引j没有越界时进行
                {
                    arr[i][j] = num;
                    num++;
                    j--; //i不变 j递减
                }
                j++; //改变索引为下一个变量的索引
                i--; //改变索引为下一个变量的索引
                direc = 4;//把方向从右到左改变为从上到上
                break;
    
            case 4:     //从下到上
                while (arr[i][j] == 0) //从下到上只需要判断是否被正确赋值
                {
                    arr[i][j] = num;
                    i--; //j不变 i递减
                    num++;
                }
                i++; //改变索引为下一个变量的索引
                j++; //改变索引为下一个变量的索引
                direc = 1; //把方向从下到上改变为从左到右
                break;
            }
        }
    }


    源代码下载地址如下:

    http://download.csdn.net/detail/yincheng01/6369295

  • 相关阅读:
    关于SimpleDateFormat安全的时间格式化线程安全问题
    JAVA多线程和并发基础面试问答
    探秘Java中的String、StringBuilder以及StringBuffer
    Java开发岗位面试题归类
    Java并发编程:阻塞队列
    Shell基本概述
    Ansible--06 ansible roles
    Ansible --05 ansible jinja2
    Ansible--04 ansible 流程控制
    Ansible--03 ansible 变量
  • 原文地址:https://www.cnblogs.com/pangblog/p/3359861.html
Copyright © 2020-2023  润新知