第19講 魔方陣汎用的生成プログラムVer.2

第3話 入力順構築
コード例
import java.io.*;
class x1{
  public static int[] x=new int[100];
  public static int[] y=new int[100];
  public static int[][] m=new int[20][20];
  public static int n,cn;
  public static void main(String args[]) throws IOException {
    BufferedReader a = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("何次魔方陣を生成させますか。");
    System.out.print ("n=");
    n=Integer.parseInt(a.readLine());
    double hj = System.currentTimeMillis();
    cn=0;
    z();
    h(); //動作確認のための表示メソッド 成功を確認した削除する
    /* 動作を確認するために以下の行を注釈文に変えることによって無効にしておく
    f(0);
    double ow = System.currentTimeMillis();
    System.out.println();
    System.out.println(n+"次魔方陣が"+cn+"個できました。");
    System.out.println("魔方陣の探索にかかった時間は"+(ow-hj)/1000+"秒です。");
    */
  }
  public static void z(){
    int i,j,p;
    int[][] a=new int[20][20];
    for(i=0;i<n;i++){
      for(j=0;j<n;j++){
        a[i][j]=n*n;
      }
    }
    for(i=0;i<n;i++){
      a[i][i]=i;
    }
    p=n;
    for(i=0;i<n;i++){
      if(a[i][n-1-i]==n*n){
        a[i][n-1-i]=p;
        p++;
      }
    }
    for(i=0;i<n;i++){
      for(j=0;j<n;j++){
        if(a[i][j]==n*n){
          a[i][j]=p;
          p++;
        }
      }
    }
    for(i=0;i<n;i++){
      for(j=0;j<n;j++){
        y[a[i][j]]=i;
        x[a[i][j]]=j;
      }
    }
  }
  public static void h(){ //動作確認のための表示メソッド 成功を確認した削除する
    int i,j;
    for(i=0;i<n*n;i++){
      m[y[i]][x[i]]=i;
    }
    for(i=0;i<n;i++){
      for(j=0;j<n;j++){
        if(m[i][j]<10){
          System.out.print(" "+m[i][j]+" ");
        }
        else{
          System.out.print(m[i][j]+" ");
        }
      }
      System.out.println();
    }
  }
           ・
           ・
           ・

実行例
入門
java
初心者
基礎
初歩
はじめての
実行例を見ればお分かりにように見事に番号付けに成功しました。

さて、public static void z()が変更になりましたので、
public static void f(int g)もかなりの変更を加えなければなりません。

10 11
12 13
14 15


4
10 11
12 13 14
15 16 17 18
19 20 21
4 22 23 24

合計をチェックしなければならない番号がかなり変則的です。

ところで、今回の番号付けコードは???ですよね。
次話で解説しますが、理解できた方はVer.2を完成させてください。


第2話へ 第4話へ

戻る

VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部