バッジ貰えたのでソースコード公開します:D
program Console1
implicit none
integer, parameter :: lm = 9
integer :: a(0:lm), l
integer :: i
write(*, 1000)
1000 format(' a d e i k l r s t w')
l = 0
do i = 0, lm
a(l) = i
call sub(lm, l, a)
enddo
end program Console1
recursive subroutine sub(lm, l, a)
implicit none
integer, parameter :: nstde = 0
integer, intent(in) :: lm, l, a(0:lm)
integer :: l1, a1(0:lm)
integer :: i, ii, p, q, r, s
if(l == lm)then
if(a(6) /= 0 .and. a(9) /= 0 .and. a(8) /= 0 .and. a(7) /= 0)then
p = a(6) * 1000 + a(2) * 100 + a(0) * 10 + a(1)
q = a(9) * 10000 + a(6) * 1000 + a(3) * 100 + a(8) * 10 + a(2)
r = a(8) * 1000 + a(0) * 100 + a(5) * 10 + a(4)
s = a(7) * 10000 + a(4) * 1000 + a(3) * 100 + a(5) * 10 + a(5)
if(s == p + q + r)then
write(nstde, 1000)(a(i), i = 0, lm)
1000 format(10(1x,i2))
endif
endif
else
l1 = l + 1
a1 = a
loop1: do i = 0, lm
a1(l1) = i
do ii = 0, l
if(a1(l1) == a1(ii))cycle loop1
enddo
call sub(lm, l1, a1)
enddo loop1
endif
end subroutine sub
問題ごとにプログラムを書き換える必要はあるけれど、再帰を使って割とシンプルにかけたと思う:)
0 件のコメント:
コメントを投稿