##统计每一个选项的个数
count(){
a=0
b=0
c=0
d=0
for((i=0;i<=${#aw[*]};i++))
do
case ${aw[${i}]} in
a)
a=`expr $a + 1`
;;
b)
b=`expr $b + 1`
;;
c)
c=`expr $c + 1`
;;
d)
d=`expr $d + 1`
;;
esac
done
num=($a $b $c $d)
return $num
}
##第二题判断
fun_2(){
case ${aw[1]} in
a)
if [ ${aw[4]} == c ]
then
return 1
fi
;;
b)
if [ ${aw[4]} == d ]
then
return 1
fi
;;
c)
if [ ${aw[4]} == a ]
then
return 1
fi
;;
d)
if [ ${aw[4]} == b ]
then
return 1
fi
;;
esac
return 0
}
##第三题判断
fun_3(){
case ${aw[2]} in
a)
if [[ ${aw[2]} != ${aw[1]} && ${aw[2]} != ${aw[3]} && ${aw[2]} != ${aw[5]} && ${aw[1]} == ${aw[3]} && ${aw[3]} == ${aw[5]} ]]
then
return 1
fi
;;
b)
if [[ ${aw[5]} != ${aw[1]} && ${aw[5]} != ${aw[2]} && ${aw[5]} != ${aw[3]} && ${aw[1]} == ${aw[2]} && ${aw[2]} == ${aw[3]} ]]
then
return 1
fi
;;
c)
if [[ ${aw[1]} != ${aw[2]} && ${aw[1]} != ${aw[3]} && ${aw[1]} != ${aw[5]} && ${aw[1]} == ${aw[2]} && ${aw[2]} == ${aw[3]} ]]
then
return 1
fi
;;
d)
if [[ ${aw[3]} != ${aw[1]} && ${aw[3]} != ${aw[2]} && ${aw[3]} != ${aw[5]} && ${aw[1]} == ${aw[2]} && ${aw[2]} == ${aw[5]} ]]
then
return 1
fi
;;
esac
return 0
}
##第四题判断
fun_4(){
case ${aw[3]} in
a)
if [ ${aw[0]} == ${aw[4]} ]
then
return 1
fi
;;
b)
if [ ${aw[1]} == ${aw[6]} ]
then
return 1
fi
;;
c)
if [ ${aw[0]} == ${aw[8]} ]
then
return 1
fi
;;
d)
if [ ${aw[5]} == ${aw[9]} ]
then
return 1
fi
;;
esac
return 0
}
##第五题判断
fun_5(){
case ${aw[4]} in
a)
if [ ${aw[4]} == ${aw[7]} ]
then
return 1
fi
;;
b)
if [ ${aw[4]} == ${aw[3]} ]
then
return 1
fi
;;
c)
if [ ${aw[4]} == ${aw[8]} ]
then
return 1
fi
;;
d)
if [ ${aw[4]} == ${aw[6]} ]
then
return 1
fi
;;
esac
return 0
}
##第六题判断
fun_6(){
case ${aw[5]} in
a)
if [[ ${aw[7]} == ${aw[1]} && ${aw[7]} == ${aw[3]} ]]
then
return 1
fi
;;
b)
if [[ ${aw[7]} == ${aw[0]} && ${aw[7]} == ${aw[5]} ]]
then
return 1
fi
;;
c)
if [[ ${aw[7]} == ${aw[2]} && ${aw[7]} == ${aw[9]} ]]
then
return 1
fi
;;
d)
if [[ ${aw[7]} == ${aw[4]} && ${aw[7]} == ${aw[8]} ]]
then
return 1
fi
;;
esac
return 0
}
##第七题判断
fun_7(){
count $aw
num=$?
#如果有两个最小值那就直接返回,无必要继续下去
min=${num[0]}
index=0
cou=0
#找到最小值
for((i=1;i<4;i++))
do
if [[ $min -gt ${num[$i]} ]]
then
min=${num[$i]}
fi
done
#最小值相同个数
for((i=1;i<4;i++))
do
if [[ $min -eq ${num[$i]} ]]
then
cou=`expr $cou + 1`
fi
done
#只允许一个最小值
if [[ $cou -ne 1 ]]
then
return 0
fi
#进行判断
case ${aw[6]} in
a)
if [[ ${num[2]} -lt ${num[0]} && ${num[2]} -lt ${num[1]} && ${num[2]} -lt ${num[3]} ]]
then
return 1
fi
;;
b)
if [[ ${num[1]} -lt ${num[0]} && ${num[1]} -lt ${num[2]} && ${num[1]} -lt ${num[3]} ]]
then
return 1
fi
;;
c)
if [[ ${num[0]} -lt ${num[1]} && ${num[0]} -lt ${num[2]} && ${num[0]} -lt ${num[3]} ]]
then
return 1
fi
;;
d)
if [[ ${num[3]} -lt ${num[0]} && ${num[3]} -lt ${num[1]} && ${num[3]} -lt ${num[2]} ]]
then
return 1
fi
;;
esac
return 0
}
##第八题判断
fun_8(){
#获取a相邻的字符
case ${aw[0]} in
a)
l=''
m=a
r=b
;;
b)
l=a
m=b
r=c
;;
c)
l=b
m=c
r=d
;;
d)
l=c
m=d
r=''
;;
esac
#判断是否正确
case ${aw[7]} in
a)
if [[ ${aw[6]} != $l && ${aw[6]} != $m && ${aw[6]} != $r ]]
then
return 1
fi
;;
b)
if [[ ${aw[4]} != $l && ${aw[4]} != $m && ${aw[4]} != $r ]]
then
return 1
fi
;;
c)
if [[ ${aw[1]} != $l && ${aw[1]} != $m && ${aw[1]} != $r ]]
then
return 1
fi
;;
d)
if [[ ${aw[9]} != $l && ${aw[9]} != $m && ${aw[9]} != $r ]]
then
return 1
fi
;;
esac
return 0
}
##第九题判断
fun_9(){
#1和6是否相同
if [[ ${aw[0]} == ${aw[5]} ]]
then
aw_1_6=1
else
aw_1_6=0
fi
case ${aw[8]} in
a)
if [ ${aw[5]} == ${aw[4]} ]
then
aw_x_5=1
else
aw_x_5=0
fi
;;
b)
if [ ${aw[4]} == ${aw[9]} ]
then
aw_x_5=1
else
aw_x_5=0
fi
;;
c)
if [ ${aw[1]} == ${aw[4]} ]
then
aw_x_5=1
else
aw_x_5=0
fi
;;
d)
if [ ${aw[8]} == ${aw[4]} ]
then
aw_x_5=1
else
aw_x_5=0
fi
;;
esac
rs=`expr $aw_x_5 + $aw_1_6`
if [[ rs -eq 1 ]]
then
return 1
fi
return 0
}
##第十题判断
fun_10(){
count $aw
num=$?
##获取最大和最小的数量
min=${num[0]}
max=${num[0]}
for((i=1;i<4;i++))
do
if [[ $max -lt ${num[$i]} ]]
then
max=${num[$i]}
fi
if [[ $min -gt ${num[$i]} ]]
then
min=${num[$i]}
fi
done
temp=`expr $max - $min`
case ${aw[9]} in
a)
if [[ $temp -eq 3 ]]
then
return 1
fi
;;
b)
if [[ $temp -eq 2 ]]
then
return 1
fi
;;
c)
if [[ $temp -eq 4 ]]
then
return 1
fi
;;
d)
if [[ $temp -eq 1 ]]
then
return 1
fi
;;
esac
return 0
}
##总判断
isTrue(){
rs=1 #第一题永远成立
for((question=2;question<=10;question++))
do
if [ ${rs} -eq 0 ]
then
return 0
fi
case $question in
2)
fun_2 ${aw}
rs=$?
;;
3)
fun_3 ${aw}
rs=$?
;;
4)
fun_4 ${aw}
rs=$?
;;
5)
fun_5 ${aw}
rs=$?
;;
6)
fun_6 ${aw}
rs=$?
;;
7)
fun_7 ${aw}
rs=$?
;;
8)
fun_8 ${aw}
rs=$?
;;
9)
fun_9 ${aw}
rs=$?
;;
10)
fun_10 ${aw}
rs=$?
;;
esac
done
return 1
}
fun(){
for aw_1 in a b c d
do
for aw_2 in a b c d
do
for aw_3 in a b c d
do
for aw_4 in a b c d
do
for aw_5 in a b c d
do
for aw_6 in a b c d
do
for aw_7 in a b c d
do
for aw_8 in a b c d
do
for aw_9 in a b c d
do
for aw_10 in a b c d
do
aw=(${aw_1} ${aw_2} ${aw_3} ${aw_4} ${aw_5} ${aw_6} ${aw_7} ${aw_8} ${aw_9} ${aw_10})
isTrue $aw
rs=$?
if [ $rs -eq 1 ]
then
echo ${aw[*]}
fi
done
aw_10=a
done
aw_9=a
done
aw_8=a
done
aw_7=a
done
aw_6=a
done
aw_5=a
done
aw_4=a
done
aw_3=a
done
aw_2=a
done
}
fun
2018年刑侦科推理试题之shell写法
最新推荐文章于 2024-03-20 10:31:51 发布