• 蓝桥杯——螺旋矩阵


    一道校赛的题,题目忘了,但大概意思就是,输入 举证的行、列数,构造螺旋矩阵:

     

    思路就是构造一个二维数组,然后全部填0,做为 螺旋填数时的碰壁判断

    填数是从 1 到 x * y,所以外面套一个while循环,当填的数 < x*y 时,不断循环

    里面主要构成是4个循环,分别负责,从左到右,从上到下,从右到左,从下到上的四条边的填数

    其中,向单一方向进行移动的同时,不断的判断继续往该方向移动时的下一位是否已经填过数【非0】,未填过数,就不断循环填数,直到填过数,结束这个方向的边的填充循环

    每次移动后,可以发现要填的数num,坐标 i j 可能会额外加减1,所以直接加个if判断,修正相关数据

    #include<stdio.h>
    #include<string.h>
    
    int a[100][100];
    
    int main(){
        int x,y;
        memset(a,0,sizeof(a));
        scanf("%d %d",&x,&y);
        int num = 0;
        int i = 1, j = 0;
        int re = x*y;//   x行   y列
        while(num < re){
            while(j <= y && !a[i][j+1]){
                a[i][++j] = ++num;
            }
            if(j > y)
            {
                j--;num--;
            }
            while(i <= x && !a[i+1][j]){
                a[++i][j] = ++num;
            }
            if(i > x)
            {
                i--;num--;
            }
            while(j >= 1 && !a[i][j-1]){
                a[i][--j] = ++num;
            }
            if(j < 1){
                j++;num--;
            }
            while(i >= 1 && !a[i-1][j]){
                a[--i][j] = ++num;
            }
        }
    
    
        //print
        for( i = 1;i <= x;i++){
            for(j = 1;j <=y;j++)
                printf("%d ",a[i][j]);
            printf("
    ");
        }
        return 0;
    }

  • 相关阅读:
    线程死的时候会调用自己的notifyAll方法,join会执行结束。
    NIO中SocketChannel read()返回0的原因
    用bytebuffer进行文件的读写代码段
    java线程池参数含义
    4.3list集合
    4.1、2集合框架介绍
    3.9stingBuffer和stringBuilder
    3.8正则表达式
    3.6、7正则表达式
    3.3、4深度了解字符串
  • 原文地址:https://www.cnblogs.com/expedition/p/12207215.html
Copyright © 2020-2023  润新知