1. 程式人生 > >n個人排成一圈,從1開始報數,數到3,退出,剩下的最後一個人

n個人排成一圈,從1開始報數,數到3,退出,剩下的最後一個人

 

package test;

import java.util.LinkedList;
import java.util.List;

public class Test4 {
 public static void main(String[] args){
  Joesephe joesephe = new Joesephe();
  int count = 1 ;
  int index = 0 ;
  for( int i = 1 ; i < 11 ; i++){
   joesephe.addElemnet(i);
  }
  
  while(joesephe.getLength() != 1){
   if(joesephe.getElement(index) == 0){
    index = (index + 1) >= joesephe.getSize() ? 0 : (index + 1) ;
    continue;
   }
   if(count == 3){
    joesephe.changeElement(index, 0);
   }
   count = (count + 1) == 4 ? 1 : count + 1;
   index = (index + 1) >= joesephe.getSize() ? 0 : (index + 1) ;
  }
  for(int i = 0 ;i<joesephe.getSize() ; i++){
   if(joesephe.getElement(i) != 0 ){
    System.out.println(joesephe.getElement(i));
   }
  }
 }
}
class Joesephe{
 private List<Integer> list = new LinkedList<Integer>();
 private int changCount = 0;
 public void addElemnet(Integer element){
  list.add(element);
 }
 public void deleteElement(int index){
  list.remove(index);
 }
 public void changeElement(int index,Integer element){
  list.remove(index);
  list.add(index, element);
  changCount ++;
 }
 public Integer getLength(){
  return list.size() - changCount;
 }
 public Integer getSize(){
  return list.size();
 }
 public Integer getElement(int index){
  return list.get(index);
 }
 
}

相關推薦

n個人排成1開始報數3退出剩下最後個人

  package test; import java.util.LinkedList; import java.util.List; public class Test4 {  public static void main(String[] args){   Joese

C語言用陣列1. 簡單約瑟夫環問題: N個人,編號從1~N圍成一圈,輸入個數T,從1開始報數,報到T的人出;下人又從1開始報數,下一個報到T的人出圈,輸出出順序。 考慮問實現約瑟夫環問題

1. 簡單約瑟夫環問題: N個人,編號從1~N圍成一圈,輸入一個數T,從1號開始報數,報到T的人出圈;下一人又從1開始報數,下一個報到T的人出圈,輸出出圈順序。 考慮問題: 報到T的人出圈,怎麼表示出圈?要麼刪除對應的標號,其他的標號前移(如果是陣列結構,要依次移動

關於有N個人圍成第一個人1開始報數報到M的人出列最後一個出列的人。

一道面試題的java解法(其實就是一道演算法題): 有n個人圍成一圈,編號分別為1到n,第一個人從1開始報數,報到m的人出列,然後從下一個人重新從1開始報數,報到m的人出列,如果報數到了最後一個人,下個人就繼續從第一個人開始報數。求最後一個出列的人的編號? 也可以這樣說:

n個人(1n號)圍成一個1號按順序報數(1-3)報數3的人隊伍去除個人繼續1開始報數最後剩下的那個人原來排在第幾位- java

有n個人(1到n號)圍成一個圈,從第1號按順序報數(1-3),每報數為3的人從隊伍去除,下個人繼續從1開始報數,問最後剩下的那個人原來排在第幾位 思考 首先將這n個人原來的號碼存放在集合list中,然後迴圈遍歷他們,報數不為3的人新增到另外一個集合

【約瑟夫環】Java實現:100個人開始1開始報數每當報數3,報數3的人離開最後留下來人的位置。

問題背景:約瑟夫環問題  在這裡寫一個簡單的約瑟夫環的問題:100個人坐成一圈開始從1開始報數,每個報數為3的人離開座位,直到座位上只剩下一個人,求這個人的位置。 解決問題使用的工具&程式語言:  工具:Eclipse  程式設計:Java 程式碼如下: public class Yuesef

N個人圍成順序排號。第一個開始報數(13報數)凡報道3的人退出圈子最後留下的是原來第幾號那位

問題: 有n個人圍成一圈,按順序從1到n編好號。從第一個人開始報數,報到3的人退出圈子,下一個人從1開始報數,報到3的人退出圈子。如此下去,直到留下最後一個人。請按退出順序輸出退出圈子的人的編號

n 個人圍成(編號1-n3的出列最後剩下的人的編號

問題: n 個人圍成一圈(編號1-n),數到3的出列,然後又從頭開始數,一直迴圈到最後一個人,請問最後剩下的人的編號? public int numberToExit(int total, int interval) { boolean[] arr = new bool

迴圈連結串列報數問題,n個人編號分別為1,2,3,……n第k個編號開始1,2到m個然後刪除第m個人然後下 個人1開始到第m個然後再刪除m人

#include<iostream> #include<stdio.h> using namespace std; //迴圈連結串列報數問題,n個人編號分別為1,2,3,……n,從第k個編號開始數1,2到m個然後刪除第m個人,然後下 //一個人再從1

python 實現N個人133的出局來回循環,最後剩下個人

循環 == size arraylist pytho add new all code person = []for i in range(1, 4):person.append(i)print ‘person:%s‘ % personindex = 0while len(

標號1-nn個人首尾相接13報數報到3退出最後個人的標號

stat 留下 pub ++ [] amp n) person last 標號1-n的n個人首尾相接,1到3報數,報到3的退出,求最後一個人的標號 public static void lastPerson(int n){ if (n < 1){

方法列印等長的二維陣列要求1開始的自然數由方陣的最外圈向內螺旋方式地順序排列。 如: n = 4 則列印:

/* * 22、 寫一方法,列印等長的二維陣列, * 要求從1開始的自然數由方陣的最外圈向內螺旋方式地順序排列。 如: n = 4 則列印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 */ public class Test22 {

實現將維陣列A(下標1開始)中的元素迴圈右移k位要求只用一個元素大小的輔助空間

#include<stdio.h>main(){ int n,arrary[50],k,temp; printf("請輸入陣列元素個數:\n"); scanf("%d",&n); for(int i=1;i<=n;i++) scanf

實現將組A(下標1開始)中的元素循環右移k位要求只用一個元素大小的輔助空間

維數 輔助 數組a emp 數組元素 移動 scan clu n) #include<stdio.h>main(){ int n,arrary[50],k,temp; printf("請輸入數組元素個數:\n"); scanf("%d",&n); for

設計一個演算法,將維陣列A(下標1開始)中的元素迴圈右移k位要求只用一個元素大小的附加儲存空間。給出演算法的時間複雜度。

程式碼 #include<stdio.h> #include<stdlib.h> #define n 10 int main() { int a[n] = { 0,1,2,3,4,5,6,7,8,9 }; int k, t=0,i,j,m; printf(

如何在MySQL裡構造SQL語句自動給查詢出來的結果加1開始的序號列

兩種辦法: 第一種:快捷 select (@i:[email protected]+1) as i,a.* from zakk_carinfo_201811 a,(select @i:=0) as it where CI_ThroughTime between "2018-11-2

劍指offer第32題JS演算法:輸入一個整數n1nn個整數的十進位制表示中1出現的次數。例如輸入121到12這些整數中包含1的數字有11011和121一共出現了5次

題目:輸入一個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次 這是我某一次去朋友公司面試試水時出的面試題,結果給我五分鐘我寫了個for迴圈的方法,被狠狠鄙視/哭笑不得 結果回來後好奇就跟同事