编号1-10的人坐在一起围成一个圈 可以数数从1开始数 数3出列 下个人继续开始从1开始数

时间:2021-04-26 18:07:49
 /**  
* Title: 编号1-10的人坐在一起围成一个圈 可以数数从1开始数 数3出列 下个人继续开始从1开始数
* Description: 打印最后一名出列是几号
* @author Mr Lv
* @date 2011-11-12
*/
import java.util.List;
import java.util.ArrayList;
public class lzwCode{

public static void main(String [] args) {
List<Integer> list = new ArrayList<Integer>();
for (int i=1; i<=10; i++) {
list.add(i);
}
int m = 0;
while(list.size() > 1) {
for (int j=0; j<list.size(); j++) {
m++;
if (m%3 == 0) {
System.out.println(list.remove(j));
j--;
m = 0;
}
}
}
System.out.println("最后一个人的号码是: " + list.get(0));
}
}

控制台运行结果:

编号1-10的人坐在一起围成一个圈 可以数数从1开始数  数3出列 下个人继续开始从1开始数


PHP 实现该功能:

<?php
/**
* 构思 1 2 3 4 5
* 2 3 4 5 1
*3 4 5 1 2
* 4 5 1 2
*5 1 2 4
* 1 2 4 5
*2 4 5
* 2 4
*/
function numPer($m ,$n) {
//构造数组
for($i=1 ;$i<=$m ;$i++){
$array[] = $i;
}
$flag = 0 ; //设置数组标记
while(count($array)>1) {
if(($flag+1)%$n == 0) {
echo $array[$flag]."<br>";
unset($array[$flag]);//数到3到的人去掉
} else {
array_push($array ,$array[$flag]); //没有数到3的人移到末尾
unset($array[$flag]);//此时这个人已经移到末尾,必须移除
}
$flag++;
}
return $array[$flag];
}
echo numPer(10,3);
?>


结果如下:

编号1-10的人坐在一起围成一个圈 可以数数从1开始数  数3出列 下个人继续开始从1开始数