Java每隔两个数删掉一个数问题详解

题目描述

有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。

以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除)如此循环直到最后一个数被删除。

输入:8

输出:6

以下是本篇文章正文内容,下面案例可供参考

解题思路

一看到这个题目,就想到了队列的约瑟夫环的问题此题思路:将两个数字取出来放到队列的后边,删掉第三个数字,如此循环,当队列只剩一个数字的时候,删掉它就是最后一个删除的数字。

代码如下

import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class Main1 {    /**     * 每日一题-隔两个删数问题     * 类似于约瑟夫环问题     * @param args     */    public static void main(String[] args){        Scanner scanner = new Scanner(System.in);        if(scanner.hasNext()) {            int n = scanner.nextInt();            Queue<Integer> queue = new LinkedList<>();            for (int i = 0; i < n; i++) {                queue.offer(i);//放进队列中            }            while(queue.size()>1){            //将两个放到队尾,再删一个                queue.offer(queue.poll());                queue.offer(queue.poll());                queue.poll();            }            System.out.println(queue.poll());        }    }}

到此这篇关于Java每隔两个数删掉一个数问题详解的文章就介绍到这了,更多相关Java每隔两个数删掉一个数 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

只有经历过地狱般的折磨,才有征服天堂的力量。

Java每隔两个数删掉一个数问题详解

相关文章:

你感兴趣的文章:

标签云: