これをプログラミングしなきゃいけないんですけど、わからないんでお願いします。階乗値を求める関数をつくり、それを使用して、「組み合わせ」の個数を調べるプログラムを作る。
・階乗値関数の名前は自由。また、再帰型、非再帰型どちらでもよい。
・nとrとを、scanf()で読み、nCrの値を計算して、表示する。
・nとrの値にかんしては、非負、非零であること、n>rであることと、n<=10であることをたしかめ、正しい数値を入力させる。
例示した、階乗値を求める関数は、0!=1となることを考えていない。0!をも扱えるように改良する。
階乗
Re: 階乗
require 'scanf'
# 階乗関数
def factorial(num)
if num == 0
1
else
(1..num).inject(1){|sum, i| sum * i}
end
end
n = 0
r = 0
loop do
puts "Please input n and r:"
input = scanf('%d %d')
n = input[0]
r = input[1]
if n > 0 && r > 0 && n > r && n <= 10
break
else
puts "Wrong input! Try again."
end
end
puts "nCr = " + (factorial(n) / factorial(r)).to_s
Re: 階乗
書きました。
(defun scanf (a) (read))
(defun fact (a) (if (> a 1) (* a (fact (- a 1))) 1))
(loop
(princ "Input n.")
(princ #\LineFeed)
(princ ">")
(setq n (scanf ()))
(if (or (< n 1) (> n 10)) 1 (return 0))
(princ "Wrong n. Input again.")
(princ #\LineFeed)
)
(loop
(princ "Input r.")
(princ #\LineFeed)
(princ ">")
(setq r (scanf ()))
(if (or (< r 1) (not (> n r))) 1 (return 0))
(princ "Wrong r. Input again.")
(princ #\LineFeed)
)
(princ "nCr=")
(princ (/ (/ (fact n) (fact (- n r))) (fact r)))
(princ #\LineFeed)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)