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

    蛇形填数

    时间限制: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
    来源
    算法经典
    上传者
    首席执行官
     
     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     int aa[105][105];
     6     int n,x,a,b,i,j;
     7     scanf("%d",&n);
     8         x=1;//第一个元素从 1 开始,
     9         memset(aa,0,sizeof(aa));
    10         for(i=0;i<=n+1;i++)/*多添加了 (n+2)*(n+2)  边界元素全部为 1  作为边界用于判断*/
    11         {
    12             for(j=0;j<=n+1;j++)
    13             {
    14                  if(i==0||i==n+1||j==0||j==n+1)
    15                     aa[i][j]=1;
    16                     //printf("%d ",aa[i][j]);
    17              }
    18            //  printf("
    ");
    19         }//printf("
    ");
    20 
    21         int flag=0;/*蛇形方向 下 左 上 右 0表示向下走 ,1表示向左,2表示向上,3表示向右*/
    22 
    23         a=0;b=n;
    24         while(x!=n*n+1)
    25         {
    26            //printf("   flag1=%d x=%d 
    ==%d",flag,x,flag%4);
    27             //printf("
    a1=%d b1=%d
    ",a,b);
    28             if(flag%4==0)
    29             //向下移动
    30             {
    31                 if(!aa[a+1][b])/*判断是否到了下边界a+1*/ aa[++a][b]=x++;
    32                 else flag++;
    33             }
    34             if(flag%4==1)
    35             //向左移动
    36             {
    37                 if(!aa[a][b-1])/*判断是否到了左边界b-1*/ aa[a][--b]=x++;
    38                 else flag++;
    39             }
    40             if(flag%4==2)
    41             //向上移动
    42             {
    43                 if(!aa[a-1][b])/*判断是否到了上边界a-1*/ aa[--a][b]=x++;
    44                 else flag++;
    45             }
    46             if(flag%4==3)
    47             //向右移动
    48             {
    49                 if(!aa[a][b+1])/*判断是否到了右边界b+1*/ aa[a][++b]=x++;
    50                 else flag++;
    51             }
    52             // printf("flag2=%d x=%d 
    ",flag,x);
    53            // if(x==n*n+1) break;
    54          // printf("a2=%d b2=%d
    
    ",a,b);
    55 
    56            /* for(i=0;i<=n+1;i++)
    57             {
    58                 for(j=0;j<=n+1;j++)
    59                     printf("%d ",aa[i][j]);//输出格式
    60                 printf("
    ");
    61             }printf("
    ");  */
    62         }
    63 
    64         //printf("flag=%d x=%d 
    ",flag,x);
    65 
    66         for(i=1;i<=n;i++)
    67         {
    68             //printf("*****
    ");从i=1,j=1开始输出
    69             for(j=1;j<=n;j++)
    70                 printf("%d ",aa[i][j]);//输出格式
    71             printf("
    ");
    72         }
    73         return 0;
    74 }
    View Code
     
  • 相关阅读:
    layer 弹出层 回调函数调用 弹出层页面 函数
    jquery 封装页面之间获取值
    ZTree 获取选中的项
    动态拼接SQL 语句
    翻译-使用Spring调用SOAP Web Service
    分享最新的博客到LinkedIn Timeline
    翻译-使用Spring WebService生成SOAP Web Service
    在Gradle中使用jaxb的xjc插件
    Gradle中的buildScript代码块
    健身4个月总结
  • 原文地址:https://www.cnblogs.com/xiaoyunoo/p/3181541.html
Copyright © 2011-2022 走看看