• 简单螺旋打印矩阵


    打印螺旋矩阵的一种简单办法 , C 语言实现

    #include <stdio.h>
    
    #define N 30
    static int val = 10;
    int arr[N][N];
    void print_row(int row_cur, int col_start, int col_end, int left_to_right){
        int col_cur = col_start;
        if( col_start < 0 || col_end < 0) return;
        if( left_to_right){
            while(col_cur < col_end){
                printf("%d ", arr[row_cur][col_cur]);
                //scanf("%d", &arr[row_cur][col_cur]);
                arr[row_cur][col_cur] = val++;
                ++col_cur;
            }
        }
        else{
            while(col_cur > col_end){
                printf("%d ", arr[row_cur][col_cur]);
                
                arr[row_cur][col_cur] = val++;
                --col_cur;
            }
        }
    }
    void print_col(int col_cur, int row_start, int row_end, int up_to_bottom){
        int row_cur = row_start;
        if(row_start < 0 || row_end < 0 ) return;
        if(up_to_bottom){
            while(row_cur < row_end){
                printf("%d ", arr[row_cur][col_cur]);
                //scanf("%d", &arr[row_cur][col_cur]);
                arr[row_cur][col_cur] = val++;
                ++row_cur;
            }
        }
        else{
            while(row_cur > row_end){
                printf("%d ", arr[row_cur][col_cur]);
                //scanf("%d", &arr[row_cur][col_cur]);
                arr[row_cur][col_cur] = val++;
                --row_cur;
            }
        }
    }
    void read_matrix(int row_start, int row_end, int col_start, int col_end){
        if(row_start > row_end|| col_start > col_end)
            return;
        if(row_start == row_end || col_start == col_end)
        {
            printf("%d ", arr[row_start][col_start]);
            //scanf("%d", &arr[row_start][col_start]);
            arr[row_start][col_start] = val++;
            return;
        }
        int i = row_start;
        int j = col_start;
        int i_end = row_end;
        int j_end = col_end;
            print_row(i,       j,        j_end,   1);
            print_col(N-j-1,   i,        i_end,     1);
            print_row(N-i-1,   j_end,    j,    0);
            print_col(j,       i_end,    i, 0);
    
    
        read_matrix(row_start+1,   row_end-1, col_start+1, col_end-1);
    }
    void printf_()
    {
        int i, j ;
        i = 0, j = 0;
        while(i < N){
            while(j < N){
                printf("%d ", arr[i][j]);
                ++j;
            }
            printf("
    ");
            ++i;
            j = 0;
        }
    }
    
    
    
    int main(void)
    {
        memset(arr, N*N,0);
        read_matrix(0, N-1, 0, N-1);
        getchar();
        printf_();
    
    }

    运行结果 :


  • 相关阅读:
    android AsyncTask
    android利用provider查询同一个数据库中没有对外暴露出来的表
    PowerProfile.java与power_profile.xml
    Java的动态绑定机制
    Activity Intent Flags及Task相关属性
    非阻塞socket调用connect, epoll和select检查连接情况示例
    Linux Epoll相关知识
    JAVA并发编程
    Activity生命周期(深入理解)
    Android线程间通信更新UI的方法(重点分析EventBus)
  • 原文地址:https://www.cnblogs.com/misserwell/p/misserwell-988-my_exec_C.html
Copyright © 2020-2023  润新知