编号1-10的人坐在一起围成一个圈 可以数数从1开始数 数3出列 下个人继续开始从1开始数
[java]
- /**
- * Title: 编号1-10的人坐在一起围成一个圈 可以数数从1开始数 数3出列 下个人继续开始从1开始数
- * Description: 打印最后一名出列是几号
- * @author LBS
- * @date 2012-07-26
- */
- 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));
- }
- }
控制台运行结果:

PHP 实现该功能:
[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);
- ?>
结果如下:

