zoukankan      html  css  js  c++  java
  • 基于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

  • 相关阅读:
    crtmpserver流媒体服务器的介绍与搭建
    RTMP流媒体服务器 crtmpserver
    red5-server源码:https://github.com/Red5/red5-server
    C++实现RTMP协议发送H.264编码及AAC编码的音视频
    linux 下Time_wait过多问题解决
    Tomcat调优配置技巧集锦
    Tomcat调优总结
    LeetCode题解之 Longest Common Prefix
    LeetCode题解之Longest Continuous Increasing Subsequence
    LeetCode题解之Longest Increasing Subsequence
  • 原文地址:https://www.cnblogs.com/pangblog/p/3359861.html
Copyright © 2011-2022 走看看