(use srfi-42) ;; 内包表記の使用に必要 (define max-a-b 300) ;; 検索対象とするa, bの上限 ;; 四捨五入の関数 (define (round-up-on-5 x) (truncate->exact (+ x (/ 1 2)))) (define (comp-min-a+b a0 b0) (min-ec ;;内包表記。以下の計算の結果のうちで、最小のものを返す (: a 0 max-a-b) ;;aを[0, max-a-b)で動かす (: b 0 max-a-b) ;;bを[0, max-a-b)で動かす (let ((s (+ a b))) (if (and (not (and (= a 0) (= b 0))) (= a0 (round-up-on-5 (/ (* 100 a) s))) (= b0 (round-up-on-5 (/ (* 100 b) s))) ) s ;; 条件に合えば最小値の候補に入れる 1000 ;; 条件が満たされなければ適当な大きい数を返す ) ) ) ) (let* ((a0 (read)) (b0 (read))) ;;A, Bを読み取る (print (comp-min-a+b a0 b0)) ;;計算結果を表示し改行する )