第8講 4次魔方陣と6次魔方陣の作成
第8話 6次魔方陣生成アプリ

#include<stdio.h>
void f(int **x); //自然配列を作成する社員
void g(int **x); //データを表示する社員
void h(int **x); //自然配列の対角線のデータを交換して4次魔方陣を作成する社員
int main(){
  int i;
  int **x=(int **)malloc(sizeof(int *)*6);
  for(i=0;i<6;i++)*(x+i)=(int *)malloc(sizeof(int)*6);
  f(x);
  g(x);
  h(x);
  printf("\n");
  g(x);
}
void f(int **x){
  int i,j;
  for(i=0;i<6;i++){
    for(j=0;j<6;j++){
      x[i][j]=6*i+j+1;
    }
  }
}
void g(int **x){
  int i,j;
  for(i=0;i<6;i++){
    for(j=0;j<6;j++){
      if(x[i][j]<10)printf("0%d ",x[i][j]);
      if(x[i][j]>=10)printf("%d ",x[i][j]);
    }
    printf("\n");
  }
}
void h(int **x){
  int w,i;
  //対角線点対称移動
  for(i=0;i<3;i++){
    w=x[i][i];
    x[i][i]=x[5-i][5-i];
    x[5-i][5-i]=w;
  }
  for(i=0;i<3;i++){
    w=x[i][5-i];
    x[i][5-i]=x[5-i][i];
    x[5-i][i]=w;
  }
  //左右線対称移動
  for(i=0;i<3;i++){
    w=x[i][(i+2)%3];
    x[i][(i+2)%3]=x[i][5-(i+2)%3];
    x[i][5-(i+2)%3]=w;
  }
  //上下線対称移動
  for(i=0;i<3;i++){
    w=x[(i+2)%3][i];
    x[(i+2)%3][i]=x[5-(i+2)%3][i];
    x[5-(i+2)%3][i]=w;
  }
}
コピペ用添付ファイル
実行画面
01 02 03 04 05 06
07 08 09 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36

36 32 04 03 05 31
12 29 27 10 26 07
19 17 22 21 14 18
13 20 16 15 23 24
25 11 09 28 08 30
06 02 33 34 35 01


  //左右線対称移動
  for(i=0;i<3;i++){
    w=x[i][(i+2)%3];
    x[i][(i+2)%3]=x[i][5-(i+2)%3];
    x[i][5-(i+2)%3]=w;
  }
の部分の解説を次話で行います。


第7話へ 第9話へ

a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ