逢3退出,我的理解是數(shù)字中帶3的, 3 13 23 30-39這些都是.
創(chuàng)新互聯(lián)公司專(zhuān)注于奉新網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供奉新?tīng)I(yíng)銷(xiāo)型網(wǎng)站建設(shè),奉新網(wǎng)站制作、奉新網(wǎng)頁(yè)設(shè)計(jì)、奉新網(wǎng)站官網(wǎng)定制、微信小程序開(kāi)發(fā)服務(wù),打造奉新網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供奉新網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
看了一下約瑟夫環(huán),說(shuō)的是 3的倍數(shù).所以做了,兩個(gè)判斷方法.
isMod3
isMeet3
從實(shí)現(xiàn)上來(lái)說(shuō),用list這樣的集合方便一些.數(shù)組不具有刪除相應(yīng)元素的能力,只能寫(xiě)方法來(lái)處理.
fun1 - list
fun2 - 用一個(gè)自定義對(duì)象數(shù)組
fun3 - 用int[]數(shù)組來(lái)處理.
你看一下吧.希望對(duì)你有幫助.
---------------------------------------------------------------------------------------------------------------------
import java.util.ArrayList;
import java.util.List;
public class Test1 {
public static void main(String[] args) throws Exception {
new Test1().fun1();
new Test1().fun2();
new Test1().fun3();
}
public void fun1() {
List listUser = new ArrayList();
for (int i = 1; i = 500; i++) {
listUser.add(i);
}
int index = 0;
int count = 1;
while (listUser.size() 1) {
// if (isMod3(count++)) {
if (isMeet3(count++)) {
listUser.remove(index);
index--;
}
if (listUser.size() == ++index) {
index = 0;
}
}
System.out.println(listUser.get(0));
}
// 例3,6,9
public boolean isMod3(int x) {
return x % 3 == 0;
}
// 例3,13,23,30,31....
public boolean isMeet3(int x) {
boolean result = false;
while (x 0) {
if (x % 10 == 3) {
result = true;
break;
}
x = x / 10;
}
return result;
}
public void fun2() {
User[] users = new User[500];
for (int i = 0; i users.length; i++) {
users[i] = new User();
users[i].no = i + 1;
}
int index = 0;
int meet = 1;
int count = 0;
while (users.length - count 1) {
if (index == users.length) {
index = 0;
}
if (users[index].isDelete) {
index++;
continue;
}
if (isMeet3(meet)) {
count++;
users[index].isDelete = true;
}
meet++;
index++;
}
for (int i = 0; i users.length; i++) {
if (!users[i].isDelete) {
System.out.println(users[i].no);
}
}
}
class User {
int no = 0;
boolean isDelete = false;
}
public void fun3() {
int[] users = new int[500];
for (int i = 0; i users.length; i++) {
users[i] = i + 1;
}
int index = 0;
int count = 1;
while (users.length 1) {
if (isMeet3(count++)) {
users = arrayRemoveIndex(users, index);
index--;
}
if (users.length == ++index) {
index = 0;
}
}
System.out.println(users[0]);
}
public int[] arrayRemoveIndex(int[] array, int index) {
int[] newArray = new int[array.length - 1];
int arrayIndex = 0;
for (int i = 0; i array.length; i++) {
if (i == index) {
continue;
}
newArray[arrayIndex++] = array[i];
}
return newArray;
}
}
這個(gè)問(wèn)題是很經(jīng)典的編程問(wèn)題,叫約瑟夫環(huán)問(wèn)題,我之前有寫(xiě)程序,所以直接拷給你吧,我初始的n值為13,你也可以自己修改
//YueSeFu.java
public class YueSeFu {
public static void main(String[] args)
{
final int n=13,s=1,m=5;//n為總?cè)藬?shù),從第1個(gè)人開(kāi)始報(bào)數(shù),報(bào)數(shù)到m的出圈
int[] p=new int[n];//數(shù)組p用于標(biāo)記已出圈的人
int[] q=new int[n];//數(shù)組q存放出隊(duì)的順序
int i,j,k,N=0;
k=s-2;//k從1開(kāi)始數(shù)出圈人的下標(biāo)
for(i=1;i=n;i++)
{
for(j=1;j=m;j++)//從1到m報(bào)數(shù),計(jì)算出圈人的下標(biāo)k
{
if(k==n-1)//當(dāng)出圈人的下標(biāo)達(dá)到末尾時(shí)
{
k=0;//出圈人的下標(biāo)從0開(kāi)始
}
else
k++;//否則下標(biāo)+1
if(p[k]==1)//若平p[k]=1,說(shuō)明下標(biāo)為k的人已出圈
{
j--;//由于讓過(guò)已出圈的人,所以j要-1,以保證每次數(shù)過(guò)m個(gè)人
}
}
p[k]=1;//將下標(biāo)為k的數(shù)組元素置1,表示出圈
q[N++]=k+1;//將下標(biāo)為k的人的編號(hào)k+1,存入數(shù)組元素q[N]中
}
System.out.println("出圈順序?yàn)椋?);
for(i=0;in;i++)
{
System.out.print(q[i]+" ");
}
}
}
public class number{ int i,num; public number() //構(gòu)造函數(shù) { for(i=0;i38;i++) if().........//加入循環(huán)條件和輸入就可以了 }public static void main(String args[]){ new number(); //調(diào)用}}需要詳細(xì)解釋或幫助可以加我QQ
用鏈表結(jié)構(gòu)來(lái)解決問(wèn)題
ListInteger list =new LinkedListInteger();
for(int i=1 ; i= 100 ; i++) list.add(i); //添加100個(gè)小盆友的編號(hào)對(duì)應(yīng)每一個(gè)人
int j =0; //記錄報(bào)數(shù)次數(shù)
while(list.size!=1){ //list中剩下一個(gè)人得時(shí)候跳出循環(huán)
int k =list.remove(0) ; //刪除第一個(gè)元素即報(bào)數(shù)的小朋友
j++; //每次報(bào)數(shù)后 j+1
if(j%3!=0) list.add(k) ; //如果j不是3得倍數(shù) 把剛報(bào)完數(shù)字的小朋友放在隊(duì)伍的最后面
}
System.out.println(list.get(0)); //剩下的最后一個(gè)就是我們需要的編號(hào)
這樣就實(shí)現(xiàn)了每次報(bào)數(shù)為3的小朋友退出
import java.util.ArrayList;
public class s {
static ArrayList list = new ArrayList();
static Object Li(int n){
int x=0;
if(list.size()==1)return list.get(0);
for(int i=0;ilist.size();i++){
if(n%3==0){list.remove(i);i--;}
n++;
}
x=n%3;n=x;
return Li(n);
}
public static void main(String[] args) {
for(int i=1;i=500;i++){
list.add(i);
}
int n=1;
System.out.print(Li(n));}
}
const int iChildrenCount=300;
int i=iChildrenCount;
while(i3)
{
i-=3;
}
return i;
其實(shí)可以這樣做:
const int iChildrenCount=300;
int iAnswer=iChildrenCount%3;
reruen iAnswer==0?3:iAnswer;