fork download
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. n := 9
  7. ans := make([]int, n)
  8. for i := range ans {
  9. ans[i] = i + 1
  10. }
  11.  
  12. evaluate := func(a []int) bool {
  13. div0 := a[1]*10 + a[2]
  14. div1 := a[4]*10 + a[5]
  15. div2 := a[7]*10 + a[8]
  16. return a[0]*div1*div2+a[3]*div0*div2+a[6]*div0*div1 == div0*div1*div2
  17. }
  18.  
  19. // (開発用)生成したpermutationの総数を確認
  20. cnt := 0
  21. _ = cnt
  22.  
  23. var permutate func(int)
  24. permutate = func(s int) {
  25. if s+2 < n {
  26. permutate(s + 1)
  27. } else {
  28. if evaluate(ans) {
  29. fmt.Println(ans)
  30. }
  31. cnt++
  32. }
  33. for i := s + 1; i < n; i++ {
  34. ans[s], ans[i] = ans[i], ans[s]
  35. permutate(s + 1)
  36. ans[s], ans[i] = ans[i], ans[s]
  37. }
  38. }
  39.  
  40. permutate(0)
  41. // fmt.Println(cnt) // must be n!
  42. }
  43.  
Success #stdin #stdout 0.01s 4196KB
stdin
Standard input is empty
stdout
[5 3 4 7 6 8 9 1 2]
[5 3 4 9 1 2 7 6 8]
[7 6 8 5 3 4 9 1 2]
[7 6 8 9 1 2 5 3 4]
[9 1 2 5 3 4 7 6 8]
[9 1 2 7 6 8 5 3 4]