./t.sh N S M
的方式運行,其中 N 是總人數,S是起始下標位置(0..N-1), M是報數的數字,比如
./t.sh 9 0 5
的含義就是總***9個人圍成壹圈,從下標為0的那個人開始報數,報數間隔為5,會得到以下輸出
5 is removed
1 is removed
7 is removed
4 is removed
3 is removed
6 is removed
9 is removed
2 is removed
8 is the last one
對這個腳本還有什麽問題,baidu hi我
#!/bin/bash
#total numbers
N=$1
# start position (0..N-1)
let S=$2%N
# step
M=$3
# initialize array
for (( i=0; i<N; i++ ))
do
let array[$i]=i+1
done
let remains=N
while [ $remains -gt 0 ]
do
step=$M
let i=S%N
while [ $step -gt 1 ]
do
let i=(i+1)%N
if [ ${array[$i]} -gt 0 ]
then
let step--
fi
done
let remains--
if [ $remains -gt 0 ]
then
echo "${array[$i]} is removed"
else
echo "${array[$i]} is the last one"
fi
array[$i]=0
for (( i=i+1; remains>0 ; i++ ))
do
let i%=N
[ ${array[$i]} -gt 0 ] && break
done
let S=i
done