数字游戏

来源:互联网 发布:阿里云的机房 编辑:程序博客网 时间:2024/05/01 00:38

学习过程中一些有意义的题目。

要求:从控制台输入一个奇数n,会打印出来一个n*n的正方形,并且每一行、每一列、对角线上的数加起来都相同。

例如:3

控制台便会打印出如下所示内容
8 1 6
3 5 7
4 9 2

其中的一些规律为:

一:1永远放在第一行的中间

二:下一个数字放在之前数字的右上角,如果放不下,就转方向。

        行超出范围:移到同一列的最后一行。

        列超出范围:移到同一行的第一列。

三:如果数字是给定数字的倍数,下一个数字直接放该数字下方

 

具体代码如下:

Shulun.java

import java.util.*;class Shulun {public static void main(String[] args) {Scanner sc=new Scanner(System.in);System.out.println("请输入一个奇数:");int n=sc.nextInt();                   //从控制台接收一个数字if(n%2==0 || n<=0)                    //判断是否是奇数{   System.out.println("您输入的不是奇数,请重新输入!");}        System.out.println("您输入的数字是:"+n);int[][] rz=new int[n][n];//定义一个n*n数组        int x=0;                              //x代表行下标int y=0;                              //y代表列下表/*8 1 63 5 74 9 2*/for(int i=1;i<=n*n;i++)              //将值放在各自的位置上{    if(i==1)                     //1放在第一行的中间{      y=n/2;}else if(i%n==1)             //如果上一个数是n的倍数,那么下面这个数直接放上一个数的下面{   x++;                    //容易出错的地方,按理说只写这一句就好了,但运行结果不正确需改进,所以有下面两行   x++;   y--;}else if(x<0)                 //行超出范围,移到这一列的最后一行{   x=n-1;}else if(y>=n)                //列超出范围,y归0{   y=0;}            rz[x][y]=i;                 //将i的值放在相应的位置System.out.println("rz["+x+"]["+y+"]"+"="+i);x--;                         //下一个数放在右上角y++;}for(int i=0;i<rz.length;i++)         //循环输出{    for(int j=0;j<rz.length;j++){System.out.print("\t"+rz[i][j]+"\t");}System.out.println();}}}


运行结果如下图所示: