小孩报数代码JAVA 小孩报数代码JAVA

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;

}

}

n个小孩围成一个圈,从一开始数,数到七的人出列,求依次出列的次序. 求用java写

这个问题是很经典的编程问题,叫约瑟夫环问题,我之前有写程序,所以直接拷给你吧,我初始的n值为13,你也可以自己修改

//YueSeFu.java

public class YueSeFu {

public static void main(String[] args)

{

final int n=13,s=1,m=5;//n为总人数,从第1个人开始报数,报数到m的出圈

int[] p=new int[n];//数组p用于标记已出圈的人

int[] q=new int[n];//数组q存放出队的顺序

int i,j,k,N=0;

k=s-2;//k从1开始数出圈人的下标

for(i=1;i=n;i++)

{

for(j=1;j=m;j++)//从1到m报数,计算出圈人的下标k

{

if(k==n-1)//当出圈人的下标达到末尾时

{

k=0;//出圈人的下标从0开始

}

else

k++;//否则下标+1

if(p[k]==1)//若平p[k]=1,说明下标为k的人已出圈

{

j--;//由于让过已出圈的人,所以j要-1,以保证每次数过m个人

}

}

p[k]=1;//将下标为k的数组元素置1,表示出圈

q[N++]=k+1;//将下标为k的人的编号k+1,存入数组元素q[N]中

}

System.out.println("出圈顺序为:");

for(i=0;in;i++)

{

System.out.print(q[i]+" ");

}

}

}

求个简单的java代码 从1开始报数,共38人,老师要求按1,2,3 重复报数 高手帮忙解决下 急求

public class number{ int i,num; public number() //构造函数 { for(i=0;i38;i++) if().........//加入循环条件和输入就可以了 }public static void main(String args[]){ new number(); //调用}}需要详细解释或帮助可以加我QQ

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程序题:有500个小朋友拉成一个圆圈,从其中一个小朋友开始依次编号1-500,

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));}

}

300个孩子排队报数,1,2,3逢三退出,问最后推出的孩子的下标是多少??java代码实现

const int iChildrenCount=300;

int i=iChildrenCount;

while(i3)

{

i-=3;

}

return i;

其实可以这样做:

const int iChildrenCount=300;

int iAnswer=iChildrenCount%3;

reruen iAnswer==0?3:iAnswer;


名称栏目:小孩报数代码JAVA 小孩报数代码JAVA
新闻来源:http://cdiso.cn/article/hideis.html

其他资讯