「小孩报数问题java」小孩报数问题 queue

博主:adminadmin 2023-01-03 22:09:06 938

今天给各位分享小孩报数问题java的知识,其中也会对小孩报数问题 queue进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java问题:500个孩子围成圈,从第一个开始报数,逢3退出,然后从下一个孩子继续开始报数,直到只剩下一个

逢3退出,我的理解是数字中带3的, 3 13 23 30-39这些都是.

看了一下约瑟夫环,说的是 3的倍数.所以做了,两个判断方法.

isMod3

isMeet3

从实现上来说,用list这样的集合方便一些.数组不具有删除相应元素的能力,只能写方法来处理.

fun1 - list

fun2 - 用一个自定义对象数组

fun3 - 用int[]数组来处理.

你看一下吧.希望对你有帮助.

---------------------------------------------------------------------------------------------------------------------

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;

}

}

java编程,100个小朋友围成一圈,各个孩子的编号为1到100,

用链表结构来解决问题

ListInteger list =new LinkedListInteger();

for(int i=1 ; i= 100 ; i++) list.add(i); //添加100个小盆友的编号对应每一个人

int j =0; //记录报数次数

while(list.size!=1){ //list中剩下一个人得时候跳出循环

int k =list.remove(0) ; //删除第一个元素即报数的小朋友

j++; //每次报数后 j+1

if(j%3!=0) list.add(k) ; //如果j不是3得倍数 把刚报完数字的小朋友放在队伍的最后面

}

System.out.println(list.get(0)); //剩下的最后一个就是我们需要的编号

这样就实现了每次报数为3的小朋友退出

java问题:80个小朋友手拉手围成圈,从第一个开始报数,数到3的离开,

这个好像马士兵的视频中有提到 一种写法是面向对象的写法 一种是面向过程的写法。定义一个有下标的数组里面统一给初始化值,每隔3个设置为另一个标识符一个。就这样判断到结尾,第二次先判断是不是退出字符 然后还是间隔3个设置另一个标识符 ,到最后生下来的就是了

关于小孩报数问题java和小孩报数问题 queue的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。