第8講 社員が自分自身に仕事を命令する=メソッドの再帰的使用

第7話 汎用的な魔方陣自動生成プログラム例
jioewjf
0577

0348
0357

を実現するプログラム例
#! ruby -Ks
print "何の順列を生成するのかをキーボードから入力して下さい。n="
n=gets.to_i
print n,"次順列の生成\n"
def f(a,g,n)
 y=g/n
 x=g%n
 i=1
 (n*n).times do
  h=1
  if g>0 then
   for j in 0..(g-1)
    jy=j/n
    jx=j%n
    if i==a[jy][jx] then
     h=0
     break
    end
   end
  end
  if h==1 then
   a[y][x]=i
  end
  if h==1 then
   if x==n-1 then
    w=0
    for j in 0..(n-1)
     w+=a[y][j]
    end
    if w!=n*(n*n+1)/2 then
     h=0
    end
   end
  end
  if h==1 then
   if y==n-1 then
    w=0
    for j in 0..(n-1)
     w+=a[j][x]
    end
    if w!=n*(n*n+1)/2 then
     h=0
    end
   end
  end
  if h==1 then
   if x==0 && y==n-1 then
    w=0
    for j in 0..(n-1)
     w+=a[j][n-1-j]
    end
    if w!=n*(n*n+1)/2 then
     h=0
    end
   end
  end
  if h==1 then
   if x==n-1 && y==n-1 then
    w=0
    for j in 0..(n-1)
     w+=a[j][j]
    end
    if w!=n*(n*n+1)/2 then
     h=0
    end
   end
  end
  if h==1 then
   if g+1<n*n then
    f(a,g+1,n)
   else
    hy(a,n)
   end
  end
 i+=1
 end
end
def hy(a,n)
 i=0
 n.times do
  j=0
  n.times do
   print a[i][j]," "
   j+=1
  end
  print "\n"
  i+=1
 end
 print "\n"
end
a=[0]
i=0
n.times do
 a[i]=[[0]]
 i+=1
end
f(a,0,n)
参考ダウンロード添付ファイル

それでは皆さん、さらにこれを改良して
jioewjf
0577
bo
と魔方陣の総数もカウントできるようにして下さい。
$cnと$を冒頭に付けると、グローバル変数といって、
すべての社員が共有できる箱(変数)になりますが、
cnは社長のローカル変数として、
引数でfに送りカウントできるようにして下さい。
結構難しい課題ですよ。
cnは引数で送るだけでなく、戻り値として戻さなければなりません。

粘り強く挑戦してどうしても分からなければ、次話をクリックしましょう。



第6話へ
 第8話へ


004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
vba 2013 2010 2007 入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門第1部へ
本サイトトップへ