#!/bin/bash # 実行結果は,端末上と./../results/quiz2.txt上の両方に出力されます # 引数$1を変数nとして読み込みます # これは,引数が4桁でなかったときに,unsetコマンドとreadコマンドで再び変数として数を読み込むためです n=$1 echo "$n:" | tee ./../results/quiz2.txt # 入力された数が4桁でないときにエラーであることを表示し,再度変数nとして数を読み込みます # 4桁の数が入力されるまで繰り返します while [ `expr length $n` -ne 4 ] do echo "4桁の数を入力してください" | tee -a ./../results/quiz2.txt ; unset n read n echo "$n:" | tee ./../results/quiz2.txt done # 入力された数の各位の数を変数として取り込みます n1=`expr substr $n 1 1` n2=`expr substr $n 2 1` n3=`expr substr $n 3 1` n4=`expr substr $n 4 1` # 与えられた数から10を作れない場合を検出するための変数をsとします s=0 # +,-,*の演算子の組み合わせで、答えが10となるものを見つけます # ()を置く位置で場合分けします # ()の使用による重複が生じないように,()の位置に応じて使用する演算子を制限します # (1)()を使わない場合 for o1 in + - \* ; do for o2 in + - \* ; do for o3 in + - \* ; do ans=$(($n1 $o1 $n2 $o2 $n3 $o3 $n4)) if [ $ans -eq 10 ] then echo "$n1 $o1 $n2 $o2 $n3 $o3 $n4" | tee -a ./../results/quiz2.txt ; s=$(($s + 1)) fi done done done # (2)第1項と第2項を()ではさむ場合 for o1 in + - ; do o2=\* for o3 in + - \* ; do ans=$((($n1 $o1 $n2) $o2 $n3 $o3 $n4)) if [ $ans -eq 10 ] then echo "($n1 $o1 $n2) $o2 $n3 $o3 $n4" | tee -a ./../results/quiz2.txt ; s=$(($s + 1)) fi done done # (3)第2項と第3項を()ではさみ、()の前に * がある場合 o1=\* for o2 in + - ; do for o3 in + - \* ; do ans=$(($n1 $o1 ($n2 $o2 $n3) $o3 $n4)) if [ $ans -eq 10 ] then echo "$n1 $o1 ($n2 $o2 $n3) $o3 $n4" | tee -a ./../results/quiz2.txt ; s=$(($s + 1)) fi done done # (4)第2項と第3項を()ではさみ、()の後ろに*がある場合 for o1 in + - \* ; do for o2 in + - ; do o3=\* ans=$(($n1 $o1 ($n2 $o2 $n3) $o3 $n4)) if [ $ans -eq 10 ] then echo "$n1 $o1 ($n2 $o2 $n3) $o3 $n4" | tee -a ./../results/quiz2.txt ; s=$(($s + 1)) fi done done # (5)第3項と第4項を()ではさむ場合 for o1 in + - \* ; do o2=\* for o3 in + - ; do ans=$(($n1 $o1 $n2 $o2 ($n3 $o3 $n4))) if [ $ans -eq 10 ] then echo "$n1 $o1 $n2 $o2 ($n3 $o3 $n4)" | tee -a ./../results/quiz2.txt ; s=$(($s + 1)) fi done done # (6)第1項から第3項を()ではさむ場合 for o1 in + - \* ; do for o2 in + - \* ; do o3=\* ans=$((($n1 $o1 $n2 $o2 $n3) $o3 $n4)) if [ $ans -eq 10 ] then echo "($n1 $o1 $n2 $o2 $n3) $o3 $n4" | tee -a ./../results/quiz2.txt ; s=$(($s + 1)) fi done done # (7)第2項から第4項を()ではさむ場合 o1=\* for o2 in + - \* ; do for o3 in + - \* ; do ans=$(($n1 $o1 ($n2 $o2 $n3 $o3 $n4))) if [ $ans -eq 10 ] then echo "$n1 $o1 ($n2 $o2 $n3 $o3 $n4)" | tee -a ./../results/quiz2.txt ; s=$(($s + 1)) fi done done # (8)第1項と第2項、第3項と第4項を()ではさむ場合 for o1 in + - ; do o2=\* for o3 in + - ; do ans=$((($n1 $o1 $n2) $o2 ($n3 $o3 $n4))) if [ $ans -eq 10 ] then echo "($n1 $o1 $n2) $o2 ($n3 $o3 $n4)" | tee -a ./../results/quiz2.txt ; s=$(($s + 1)) fi done done # s=0は与えられた数から10を作れないことを意味しています if [ $s -eq 0 ] then echo "その数からは10を作れません" | tee -a ./../results/quiz2.txt fi