JAVA语言问题

有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。... 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 展开
 我来答
匿名用户
2014-01-02
展开全部
import java.util.Scanner;
/**
 * 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
 */
public class RingTest{
    public static void main(String[] args){
        //提示输入总人数
        System.out.println("请输入做这个游戏的总人数n:");
        Scanner sca=new Scanner(System.in);
        int n=sca.nextInt();
      
        System.out.println("按出圈的次序输出序号:");        
        //创建有n个值的数组
        int[] a=new int[n];
        //初始长度,以后出圈一个,长度就减一
        int len=n;
        //给数组赋值
        for(int i=0;i<a.length;i++)
            a[i]=i+1;
        //i为元素下表,j代表当前要报的数
        int i=0;
        int j=1;
        //last表示最后留下的人
        int last=0; 
        while(len>0){
            if(a[i%n]>0){
                if(j%3==0){//找到要出圈的人,并把圈中人数减一
                    if(len==1){
                    last = a[i%n];
                    }
                    a[i%n]=-1;
                    j=1;
                    i++;
                    len--;
                }else{
                    i++;
                    j++;
                }
            }else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数
                i++;
            }
        }
        
        System.out.println("最后留下的是原来第"+last+"号");
    }
}
维特bP
2014-01-02 · TA获得超过406个赞
知道小有建树答主
回答量:659
采纳率:33%
帮助的人:183万
展开全部
写算法,设置两个数组,一个是n个小孩,一个是visited标记数组,%3,顺着往下数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xringxiaofu
2014-01-02 · TA获得超过471个赞
知道小有建树答主
回答量:475
采纳率:0%
帮助的人:206万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式