有n个孩子(编号1,2...n)围成一圈,现在从编号为k的孩子开始报数,当报数到m时,报m的那个孩子出列,然后从报m的那个孩子的下一个孩子重新开始从1报数...
求:孩子们出列的序列。
求:孩子们出列的序列。
static
void
Main(
string
[] args)
{
int
[] a
=
new
int
[] {
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
};
OutQueue(a,
2
,
4
);
}
static
void
OutQueue(
int
[] obj,
int
k,
int
m)
{
if
(obj
==
null
||
obj.Length
==
0
)
return
;
if
(k
<
1
||
k
>
obj.Length)
{
Console.WriteLine(
"
K value is invalid!
"
);
return
;
}
if
(m
<=
0
)
{
Console.WriteLine(
"
m value is invalid!
"
);
return
;
}
int
count
=
0
;
//
同m比较,数到m就输出当前位置
int
mod
=
m
%
obj.Length
==
0
?
obj.Length : m
%
obj.Length;
//
防止m超过数组长度,取模代替之
int
index
=
k
-
1
;
//
存放当前的index,为什么要-1?因为数组下标从0开始
int
got
=
0
;
while
(got
<
obj.Length
-
1
)
{
count
=
1
;
for
(
int
j
=
0
; j
<
mod; j
++
)
{
if
(count
==
mod)
{
while
(obj[index
%
obj.Length]
==
0
)
index
++
;
Console.WriteLine(
"
The {0} person is out of queue!
"
, index
%
obj.Length
+
1
);
got
++
;
obj[index
%
obj.Length]
=
0
;
}
count
++
;
index
++
;
}
}
for
(
int
i
=
0
; i
<
obj.Length; i
++
)
{
if
(obj[index
%
obj.Length]
!=
0
)
Console.WriteLine(
"
The {0} person is out of queue!
"
, index
%
obj.Length
+
1
);
index
++
;
}
}