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個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直至殺掉所有人,當剩下
public class Game { public int fun(int N,int k,int m) { int[] array=new int[N]; //建立N個人 int n=N; //剩餘人數 for(int
有n個人(1到n號)圍成一個圈,從第1號按順序報數(1-3),每報數為3的人從隊伍去除,下個人繼續從1開始報數,問最後剩下的那個人原來排在第幾位- java
有n個人(1到n號)圍成一個圈,從第1號按順序報數(1-3),每報數為3的人從隊伍去除,下個人繼續從1開始報數,問最後剩下的那個人原來排在第幾位 思考 首先將這n個人原來的號碼存放在集合list中,然後迴圈遍歷他們,報數不為3的人新增到另外一個集合
Java叠代器問題 有100個人圍成一個圈從1開始報數,報到14的這個人就要退出,然後其他人重新開始,從1報數,到14退出問:最後剩下的是100人中的第幾個人 用listIterator叠代元素,並對集合進行刪除操作
arraylist ger new println 集合 arr size 計數 add package com.swift; import java.util.ArrayList; import java.util.List; import java.util.Lis
【約瑟夫環】Java實現:100個人開始從1開始報數,每當報數到3,報數3的人離開,求最後留下來人的位置。
問題背景:約瑟夫環問題 在這裡寫一個簡單的約瑟夫環的問題:100個人坐成一圈開始從1開始報數,每個報數為3的人離開座位,直到座位上只剩下一個人,求這個人的位置。 解決問題使用的工具&程式語言: 工具:Eclipse 程式設計:Java 程式碼如下: public class Yuesef
有N個人圍成一圈,順序排號。從第一個開始報數,(從1到3報數),凡報道3的人退出圈子,問最後留下的是原來第幾號那位
問題: 有n個人圍成一圈,按順序從1到n編好號。從第一個人開始報數,報到3的人退出圈子,下一個人從1開始報數,報到3的人退出圈子。如此下去,直到留下最後一個人。請按退出順序輸出退出圈子的人的編號
n 個人圍成一圈(編號1-n),數到3的出列,最後剩下的人的編號
問題: 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個人,從1數到3,數到3的出局,來回循環,最後剩下一個人
循環 == size arraylist pytho add new all code person = []for i in range(1, 4):person.append(i)print ‘person:%s‘ % personindex = 0while len(
標號1-n的n個人首尾相接,1到3報數,報到3的退出,求最後一個人的標號
stat 留下 pub ++ [] amp n) person last 標號1-n的n個人首尾相接,1到3報數,報到3的退出,求最後一個人的標號 public static void lastPerson(int n){ if (n < 1){
有一組數字,從1到n,從中減少了3個數,順序也被打亂,放在一個n-3的數組裡,請找出丟失的數字,最好能有程式,最好演算法比較快
static void Main() { GetRemoveNumbers(1000, 3).ForEach(n => Console.WriteLine("{0}", n)); }
有一組數字,從1到n,從中減少了3個數,順序也被打亂,放在一個n-3的數組裡,請找出丟失的數字,最好能有程式,最好演算法比較快...
static void Main() { GetRemoveNumbers(1000, 3).ForEach(n => Console.WriteLine("
寫一方法,列印等長的二維陣列,要求從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演算法:輸入一個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次
題目:輸入一個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次 這是我某一次去朋友公司面試試水時出的面試題,結果給我五分鐘我寫了個for迴圈的方法,被狠狠鄙視/哭笑不得 結果回來後好奇就跟同事