黑马程序员技术交流社区

标题: 大家好,菜鸟学编程写的幻方程序, [打印本页]

作者: panzhenglian    时间: 2013-12-21 19:34
标题: 大家好,菜鸟学编程写的幻方程序,
  1. import java.util.Scanner;
  2. public class huanfang
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner in=new Scanner(System.in);
  7.                 int 用户输入;
  8.                 do{
  9.                         System.out.println("请输入幻方阶数");
  10.                         int n=in.nextInt();
  11.                        
  12.                         if(n<3){
  13.                                 System.out.println("输入错误,请重新输入");
  14.                         }else if(n%2!=0){
  15.                                 daying(jishu(n));
  16.                                 //panduanzhengque(jishu(n));//用来判断程序结果是否正确,可以关闭
  17.                         }else if(n%4==0){
  18.                                 daying(mu4ou(n));
  19.                                 //panduanzhengque(mu4ou(n));
  20.                         }else{
  21.                                 daying(mu4_2ou(n));
  22.                                 //panduanzhengque(mu4_2ou(n));
  23.                         }
  24.                         System.out.println("是否继续,按1继续,按任意键取消");
  25.                         用户输入=in.nextInt();
  26.                 }while(用户输入==1);
  27.         }
  28.        
  29.         public static int[][] mu4ou(int n)
  30.         {
  31.                 int arr[][]=new int[n][n];
  32.                 int i=0,j,c1=1,c2=n*n;
  33.                
  34.                 while(i<n){

  35.                         j=0;
  36.                
  37.                         while(j<n){
  38.                
  39.                                 arr[i][j]=-1;
  40.                                 arr[i+1][j+1]=-1;
  41.                                 arr[i+2][j+2]=-1;
  42.                                 arr[i+3][j+3]=-1;
  43.                                 arr[i][j+3]=-1;
  44.                                 arr[i+1][j+2]=-1;
  45.                                 arr[i+2][j+1]=-1;
  46.                                 arr[i+3][j]=-1;
  47.                                 j+=4;
  48.                         }
  49.                         i+=4;
  50.                 }
  51.                 for(int a=0;a<n;a++){
  52.                         for(int b=0;b<n;b++){
  53.                                 if(arr[a][b]==0){
  54.                                         arr[a][b]=c1;
  55.                                 }else{
  56.                                         arr[a][b]=c2;
  57.                                 }
  58.                                 c1++;
  59.                                 c2--;
  60.                         }
  61.                 }
  62.                 return arr;
  63.         }
  64.        
  65.         public static int[][] mu4_2ou(int n)
  66.         {
  67.                 int xiao[][]=jishu(n/2);
  68.                 int arr[][]=new int[n][n];
  69.                 int k=(n-2)/4;
  70.                 for(int a=0;a<n;a++){
  71.                         for(int b=0;b<n;b++){
  72.                                 if(a<n/2 && b<n/2){
  73.                                         arr[a][b]=xiao[a][b];
  74.                                         if(a!=k && b<k){
  75.                                                 arr[a][b]+=(n*n)/4*3;
  76.                                         }
  77.                                         if(a==k&&(k>b-a&&b-a>=0)){
  78.                                                 arr[a][b]+=(n*n)/4*3;
  79.                                         }
  80.                                 }
  81.                                 else if(a<n/2 && b>=n/2){
  82.                                         arr[a][b]=xiao[a][b-n/2]+(n*n)/2;
  83.                                         if(b<n/2+1+k&&b>n/2+1){
  84.                                                 arr[a][b]-=(n*n)/4;
  85.                                         }
  86.                                 }
  87.                                 else if(a>=n/2 && b>=n/2){
  88.                                         arr[a][b]=xiao[a-n/2][b-n/2]+(n*n)/4;
  89.                                         if(b<n/2+1+k&&b>n/2+1){
  90.                                                 arr[a][b]+=(n*n)/4;
  91.                                         }
  92.                                 }
  93.                                 else {
  94.                                         arr[a][b]=xiao[a-n/2][b]+(n*n)/4*3;
  95.                                         if(a!=k+n/2 && b<k){
  96.                                                 arr[a][b]-=(n*n)/4*3;
  97.                                         }
  98.                                         if(a==k+n/2&&(k>b+n/2-a&&b+n/2-a>=0)){
  99.                                                 arr[a][b]-=(n*n)/4*3;
  100.                                         }
  101.                                 }
  102.                         }
  103.                 }
  104.                
  105.                 return arr;
  106.         }
  107.        
  108.         public static int[][] jishu(int n)
  109.         {
  110.                 int x=0,y=n/2,bianzi=1,x1=0,y1=0;
  111.                 int[][] hfsz=new int[n][n];
  112.                 hfsz[x][y]=1;
  113.                 bianzi=bianzi+1;
  114.                 while(bianzi<=n*n){
  115.                         x1=x-1;
  116.                         y1=y-1;
  117.                         if(x1==-1){
  118.                                 x1=x1+n;
  119.                         }
  120.                         if(y1==-1){
  121.                                 y1=y1+n;
  122.                         }
  123.                         if(hfsz[x1][y1]!=0){
  124.                                 x++;
  125.                         }else{
  126.                                 x=x1;
  127.                                 y=y1;
  128.                         }
  129.                         hfsz[x][y]=bianzi;
  130.                         bianzi++;
  131.                 }
  132.                 return hfsz;
  133.                
  134.         }
  135.         public static void daying(int arr[][]){
  136.                 String cf="\n\n\n\t";
  137.                 int n=arr.length;
  138.                 for(int a=0;a<n;a++){
  139.                         for(int b=0;b<n;b++){
  140.                                 if(arr[a][b]>9){
  141.                                         cf=cf+arr[a][b]+"  ";
  142.                                 }else{
  143.                                         cf=cf+"0"+arr[a][b]+"  ";
  144.                                 }
  145.                         }
  146.                         cf=cf+"\n\n\t";
  147.                 }
  148.                 System.out.println(cf);
  149.         }
  150.         public static void panduanzhengque(int arr[][]){
  151.                 for(int a=0;a<arr.length;a++){
  152.                         int z1=0;
  153.                         int z2=0;
  154.                         for(int b=0;b<arr.length;b++){
  155.                                 z1=z1+arr[a][b];
  156.                                 z2=z2+arr[b][a];
  157.                         }
  158.                         System.out.println("\t第"+(a+1)+"行的值是"+z1+"\n");
  159.                         System.out.println("\t第"+(a+1)+"列的值是:"+z2+"\n");
  160.                 }
  161.                
  162.         }
  163. }
复制代码



今天思考了很久想出来的办法,利用的数学公式还是百度搜索的,不知道什么时候能做成图形界面的,

作者: V_John    时间: 2013-12-21 20:57
??这是提问的吗?问的问题在哪里啊?呵呵
作者: panzhenglian    时间: 2013-12-22 14:19
V_John 发表于 2013-12-21 20:57
??这是提问的吗?问的问题在哪里啊?呵呵

额,我想问的是java能不能做成图形界面的,毕竟dos命令不太好看
作者: V_John    时间: 2013-12-22 21:32
panzhenglian 发表于 2013-12-22 14:19
额,我想问的是java能不能做成图形界面的,毕竟dos命令不太好看

额。。这里是.NET板块,
作者: panzhenglian    时间: 2013-12-23 14:36
V_John 发表于 2013-12-22 21:32
额。。这里是.NET板块,

新人嘛,总会迷路的:loveliness:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2