zoukankan      html  css  js  c++  java
  • 用java代码实现环圈报数

    环圈报数就是围一圈人,每一次数数数到三的人自动出圈,再接着数,

    用数据结构的思想实现

    public class Count3Quit
    {
        public static void main(String[] args)
        {
            boolean[] arr = new boolean[500];
            
            for(int i=0; i<arr.length; i++)
            {
                arr[i] = true;
            }

            int leftCount = arr.length;
            int countNum = 0;
            int index = 0;

            while(leftCount > 1)
            {
                if(arr[index] == true)
                {
                    countNum++;
                    if(countNum == 3)
                    {
                        countNum =0;
                        arr[index] = false;
                        leftCount --;
                    }
                }

                index ++;
                
                if(index == arr.length)
                {
                    index = 0;
                }
            }
            for(int i=0; i<arr.length;i++)
            {
                if(arr[i] == true)
                {
                    System.out.println(i);
                }
            }
        }
    }

    用面向对象的思想实现

    public class Count3Quit2
    {
        public static void main(String[] args)
        {
            KidCircle kc = new KidCircle(500);
            int countNum = 0;
            Kid k = kc.first;
            while(kc.count>1)
            {
                countNum++;
                if(countNum == 3)
                {
                    countNum = 0;
                    kc.del(k);
                }
                k = k.right;
            }

            System.out.println(kc.first.id);
        }
    }

    class Kid
    {
        int id;
        Kid left;
        Kid right;

    }

    class KidCircle
    {
        int count = 0;
        Kid first,last;

        KidCircle(int n)
        {
            for(int i=0; i<n; i++)
            {
                add();
            }
        }

        void add()
        {
            Kid k = new Kid();
            k.id = count;
            if(count == 0)
            {
                first = k;
                last = k;
                k.left = k;
                k.right = k;
            }
            else
            {
                last.right = k;
                k.left = last;
                k.right = first;
                first.left = k;
                last = k;
            }
            count++;
        }

        void del (Kid k)
        {
            if(count <= 0)
            {
            return ;
            }
            else if(count == 1)
            {
                first = last = null;
            }
            else
            {
                k.left.right = k.right;
                k.right.left = k.left;

                if(k == first)
                {
                    first = k.right;
                }
                else if(k == last)
                {
                    last = k.left;
                }
            }
            count--;
        }

    }

  • 相关阅读:
    [转载]分治算法详解
    数值的三种表示--C语言
    [转载]位运算操作
    递归--基于位运算的八皇后问题求解
    递归--基于回溯和递归的八皇后问题解法
    关于C/C++中数组元素的初始化
    递归的使用方法及说明
    递归--基于排列的八皇后问题解法
    Android笔记(二十) Activity中的跳转和值传递
    Android笔记(十九) Android中的Fragment
  • 原文地址:https://www.cnblogs.com/riskyer/p/3297334.html
Copyright © 2011-2022 走看看