#简单的说,有1到100的数字序列循环读数。每当计数器值为12,就将计数器指向的数字在亚瑟环中剔除并将计数器置1,问该序列中最后剩下的数字是多少?
#算法:当计数器为12时,则将计数器对应的数组中的数字置0,当数组中只有一个不为0的数值时,即为最后剩下的数值。
#!/bin/bash
#定义数组numarray[]
numarray=({0..100})
#定义一个计数器num
num=0
#定义一个计数器i
i=0
#定义变量用于存放剩余数值的数量
remainnum=100
echo "We will get the following number one by one"
#当剩余数值的数量不为1时,执行以下循环
while [ $remainnum -ne 1 ]
do
num=$[ $num+1 ]
i=$[ $i+1 ]
# 如果数组中当前数值为0,表示该数字已近被剔除,则计数器-1
if [[ ${numarray[$i]} -eq 0 ]]
then
num=$[ $num-1 ]
fi
# 如果计数器num为12,则打印该数字并将此数字对应的变量置为0
if [[ $num -eq 12 ]]
then
echo -n ${numarray[$i]}'->'
numarray[$i]=0
# 遍历数组,查看剩余的不为0的变量个数
remainnum=0
for((j=0;j<100;j++))
do
if [ ${numarray[$j]} -ne 0 ]
then
remainnum=$[ $remainnum+1 ]
fi
# 如果remainnum大于1,则跳出遍历数组循环
if [ $remainnum -gt 1 ]
then
break
fi
done
# 如果数组中只有一个变量值不为0,则打印这个变量,并跳出while循环
if [ $remainnum -eq 1 ]
then
echo
for((j=1;j<100;j++))
do
if [ ${numarray[j]} -ne 0 ]
then
echo "And the last number is"
echo ${numarray[j]}
break
fi
done
break
fi
fi
# 当计数器i的值为100时,则重置该计数器
if [ $i -eq 100 ]
then
i=0
fi
# 当计数器num的值为12时,则重置该计数器
if [ $num -eq 12 ]
then
num=0
fi
done