zoukankan      html  css  js  c++  java
  • 蛇形填数

    一、输出N*N列蛇形数,如

             
    难点在于蛇形圈数,如下
                     
    N为10时,圈数为5;N为5时,圈数为3
    再推可得出结论:圈数K=(N+1)/2
    当N=10时,(int)K=(10+1)/2=5;
    当N=5时,(int)K=(5+1)/2=3。
     
    代码如下:
     1 #include <stdio.h>
     2 
     3 #define N 10
     4 
     5 int main()
     6 {
     7     int a[N][N]={0};//初始化全为0
     8     int data=1;
     9     for(int i =0, j =0, k =0; k <(N+1)/2; k++)//i为行,j为列,k为圈数
    10     {
    11         while(j<N-k)//控制圈数, 首先赋值第一圈(k=0)第一行,一共N列,减去圈数,即为列尾+1列
    12         {
    13             a[i][j]=data;//赋值
    14             j++;//往右边移动
    15             data++;
    16         }
    17         j--;//退回,while(1)循环后,j=N-k;因为j从0开始,所以一共有N-k-1列,所以要往回退一列,即j--
    18         i++;//转向,接着对第一圈(k=0)第N-1列赋值
    19 
    20         while(i<N-k)//同上,i最大值为N-k-1
    21         {
    22             a[i][j]=data;
    23             i++;
    24             data++;
    25         }
    26         i--;//退回
    27         j--;//转向
    28 
    29         while(j>k-1)//当k=0时,j最小为0;当k=1时,j最小为1;。。。所以j>k-1
    30         {
    31             a[i][j]=data;
    32             j--;
    33             data++;
    34         }
    35         j++;//退回
    36         i--;//转向
    37 
    38         while(i>k)//当k=0时,i最小为1;当k=1时,i最小为2;。。。所以i>k
    39         {
    40             a[i][j]=data;
    41             i--;
    42             data++;
    43         }
    44         i++;//退回
    45         j++;//转向
    46     }
    47 
    48     for(int i =0; i < N;++i)
    49     {
    50         for(int j =0; j < N;++j)
    51         {
    52             printf("%3d", a[i][j]);
    53         }
    54         printf("
    ");
    55     }
    56     
    57     return 0;
    58 }
     
     
    二、
    /*****************************************************************************************
                                            蛇形填数
                            时间限制:3000 ms  |  内存限制:65535 KB
                                              难度:3
    描述
    在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
    10 11 12 1
    9 16 13 2
    8 15 14 3
    7 6 5 4
    输入
    直接输入方陈的维数,即n的值。(n<=100)
    输出
    输出结果是蛇形方陈。
    样例输入
    3
    样例输出
    7 8 1
    6 9 2
    5 4 3
    *****************************************************************************************/
    
    #include <stdio.h>
    
    #define N 100
    
    int main()
    {
        int n,data=1;
        scanf("%d",&n);
        int a[N][N]={0};
        for(int i=0,j=n-1,k=0; k<(n+1)/2; k++)//K循环层数
        {
            while(i<n-k)
            {
                a[i][j]=data;
                i++;
                data++;
            }
            i--;
            j--;
    
            while(j>k-1)
            {
                a[i][j]=data;
                j--;
                data++;
            }
            j++;
            i--;
    
            while(i>k-1)
            {
                a[i][j]=data;
                i--;
                data++;
            }
            i++;
            j++;
    
            while(j<n-k-1)
            {
                a[i][j]=data;
                j++;
                data++;
            }
            j--;
            i++;
        }
    
        for(int i =0; i < n;++i)
        {
            for(int j =0; j < n;++j)
            {
                printf("%3d ", a[i][j]);
            }
            printf("
    ");
        }
        
        return 0;
    }
     
  • 相关阅读:
    很长的下拉框菜单
    Pure CSS Buttons – Good Button Style and No Images
    ssh 配置
    php大量session存储到内存中,散列及过期回收
    array_append_distinct, array_erase函数
    关于C# 中的Attribute 特性(转载)
    Jquery如何操作Table的某一个td
    ASP.NET应用程序生命周期趣谈(四) HttpHandler和页面生命周期
    ASP.NET应用程序生命周期趣谈(五) IIS7瞎说
    ASP.NET应用程序生命周期趣谈(三)
  • 原文地址:https://www.cnblogs.com/moon-future/p/4903104.html
Copyright © 2011-2022 走看看