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每隔兩個數刪掉一個數 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- None Found