#!/bin/bash
使用shell脚本计算亚瑟王环
原创
©著作权归作者所有:来自51CTO博客作者smileliuyb的原创作品,请联系作者获取转载授权,否则将追究法律责任
#简单的说,有1到100的数字序列循环读数。每当计数器值为12,就将计数器指向的数字在亚瑟环中剔除并将计数器置1,问该序列中最后剩下的数字是多少?
#算法:当计数器为12时,则将计数器对应的数组中的数字置0,当数组中只有一个不为0的数值时,即为最后剩下的数值。
#!/bin/bash
#!/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
上一篇:RHEL5.5简单配置apache+MySql+PHP
下一篇:MYSQL简单应用
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
shell面试测试题:亚瑟王环 shell脚本解法
转载请注明出处:http://xingher.blog.51cto.com/
shell 数学题 计数器 测试题 亚瑟王 -
HNOI2015 亚瑟王(概率DP)
传送门考虑对每张牌求出出掉它的概率那么期望就可以轻易算出一张牌被考虑的次数与考虑到它的轮数
i++ #include #define -
【APIO2016】亚瑟王之宫
DescriptionSolution暴力一开始看到这题:暴搜?剪枝?贪心?不知所措,但是
APIO 亚瑟王之宫 暴搜 贪心 最短路 -
bzoj4008 [HNOI2015]亚瑟王
LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑。 他决定,在脱坑
数据 #include 测试数据 -
poj 3682 亚瑟王抛硬币(雾)
期望dp
#include #define i++ -
BZOJ 4008 亚瑟王(概率DP 奥妙重重)
题意中文题面,就不就解释了分析显然这道题直接求期望太麻烦,想想转化问题
c++ 预处理 #include -
BZOJ 4008 亚瑟王
BZOJ 4008 亚瑟王
i++ #include ios #define .net