Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 434|回复: 0

[Java基础知识]填数字

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-2 06:14:53 | 显示全部楼层 |阅读模式
    在一些武侠小说中为了体现主人公的聪明才智,往往会有一些类似于九宫格填数(把 1―9 的九个数字分别填在三行三列的方格中,使横、竖、对角线各方向的和相等)的智力题,现在请你用计算机来填写并输出该方阵。  如三行三列的九宫格填写如下左图、填好的五行五列如下右图:
        
      
      
       
       
         
         本题难点是找出算法规律,其规律如下:  经过比较分析可有两种方法直接按要求填好数字。        第一种填法如下图所示:对于三行三列的九宫格,先把所有数字排成一个方阵,再把这个方阵顺时针旋转 45 度,按图所示再用线描出一个正方形,在这个正方形的格

         
         
         
         子中有的已经有了数字,而有的数字则被描在格子的外面,然后把格子外面的数字,上下左右对调填入空格就行了。       而对于 5 行 5 列及以上的可参考右上图:你会发现,当格子描完以后,格子外面的数字较多,如右上图中的第 3 幅图。仔细观察红色空圈和圈中数字的红圈,你会发现这两类圈的阵列正好相同,这时只要把圈中数字的红圈中的数字,平移至上方并填入上面的红色空圈组成的方阵即可,对于上方、左方、右方,均可依此法填入,就完成了填数。  第二种方法是直接填写,但是您要掌握填写的规律。如下图


         图(1)  
               图(2)  
         
         
        图(1)是 5 × 5 方阵的填写,图(2)是 7 × 7 方阵的填写。

         观察图(1)中填写时,把方阵看成是一系列右斜的方格,你会发现 A 所在的一斜行方格有四个, a 所在的一斜行方格有一个,加起来正好有五个,同样 B 与 b 、 D 与 d 、 E 与 e 对应的一斜行加起来也是五个。只要将从 A 开始向右下填写,依次写 1 、 2 ……当填至 2 时,右下角则无空格,再开始填写对应的 a 一行,也从左上向右下填写,填完本行后,再填 A 行中从左上至右下填写,依次就可以填好。对于图(2),读者可自行思考。当然行列数较多的也是同样填法。  这两种方法中,第一种比较直观,但填写步骤多。第二种填写较快,但不直观。 我的解题思路是应用二维数组,根据该方阵填写方法 2 顺序生成 1 - n 2 个数,同时依次生成下标,并进行赋值后输出。  其 java 源码如下:
    1. import java.io.*;
    2. public class playnum
    3. {
    4.   public static void main(String []args)
    5.    {
    6.     int n,k,i,j;
    7.     n=9;
    8.     String s;
    9.     try
    10.      {
    11.       do {
    12.       BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    13.       System.out.print("请输入一个大于等于3的奇数:");
    14.       s=in.readLine();
    15.       n=Integer.parseInt(s);
    16.         }
    17.       while ((n % 2 ==0) || n<3);
    18.       } catch (IOException e){};
    19.       
    20.       int a[][]=new int[n][n];
    21.      j=n/2;i=j+1;   
    22.      for (k=1;k<=n*n;k++)
    23.      {
    24.       a[i][j]=k;
    25.       if (k % n==0) {i++;j--;}
    26.       i=(i+1)%n ;
    27.       j=(j+1)%n ;
    28.       if (k==(n/2)*n) {i=0;j=0;};
    29.       if (k==(((n+1)/2)*n)) {i=1;j=n-1;};
    30.       }
    31.      for (i=0;i<=n-1;i++) {
    32.         System.out.println();
    33.         System.out.println();
    34.         for (j=0;j<=n-1;j++) System.out.print(a[i][j]+"  ");
    35.      }
    36.     }
    37.   }
    38. 丁香
    复制代码
    QQ:181564186 e-mail: cloveses@126.com
    1. 运行结果:

    2.    C:java>java   playnum
    3. 请输入一个大于等于3的奇数:9
    4. 37 78 29 70 21 62 13 54 5
    复制代码
    6 38 79 30 71 22 63 14 46 47 7 39 80 31 72 23 55 15 16 48 8 40 81 32 64 24 56 57 17 49 9 41 73 33 65 25 26 58 18 50 1 42 74 34 66 67 27 59 10 51 2 43 75 35 36 68 19 60 11 52 3 44 76 77 28 69 20 61 12 53 4 45
      
       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/2/061452562.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-27 01:44 , Processed in 0.386571 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表