第8講 4次魔方陣と6次魔方陣の作成
第10話 4次魔方陣生成アプリ第2弾
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
↓
1 | 15 | 14 | 4 |
12 | 6 | 7 | 9 |
8 | 10 | 11 | 5 |
13 | 3 | 2 | 16 |
を実現するアプリ
#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 *)*4);
for(i=0;i<4;i++)*(x+i)=(int *)malloc(sizeof(int)*4);
f(x);
g(x);
h(x);
printf("\n");
g(x);
}
void f(int **x){
int i,j;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
x[i][j]=4*i+j+1;
}
}
}
void g(int **x){
int i,j;
for(i=0;i<4;i++){
for(j=0;j<4;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<2;i++){
w=x[0][i+1];
x[0][i+1]=x[3][2-i];
x[3][2-i]=w;
}
for(i=0;i<2;i++){
w=x[i+1][0];
x[i+1][0]=x[2-i][3];
x[2-i][3]=w;
}
}
コピペ用添付ファイル
トーレスを是非ともご自分で行って下さい。
これで、第8講は終わりにしまして、
第9講では、分身の術(関数の再帰的使用)について学びます。
さらに、第10講では分身の術(関数の再帰的使用)を利用して、
魔方陣自動生成ソフトに挑戦します。
第8講は、魔方陣生成のための規則をコンピュータに教えて、
コンピュータは命令通り動いて魔方陣を生産しただけですが、
第10講では、コンピュータが自ら考えて魔方陣の生成を行います。
第10講で扱うアプリは、
理論的には何次魔方陣でも生成できますし、
またすべての解(答え)を作り出しますが、
現実的には、可能なのは4次魔方陣までです。
5次以降を扱えるようにするためには、
様々な工夫を必要とします。
魔方陣自動生成ソフトの高速化に成功すると、
数独(ナンプレ)問題自動生成アプリや数独(ナンプレ)を解くソフトの開発が、
見えてきます。
魔方陣自動生成アプリと数独アプリは、原理がまったく同じであるからです。
私が、数独問題自動生成アプリを日本でも最も早い時期に開発できた理由は、
魔方陣生成を研究していたからです。
小学生の皆さんも市販されている数独アプリより優れたアプリを作れるようになりますよ。
第9話へ 第9講第1話へ
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ