java编程,有n个人围成一圈,顺序排号,从一号到n号,从第一个开始报数,(从1报到3)凡报到3的

java编程,有n个人围成一圈,顺序排号,从一号到n号,从第一个开始报数,(从1报到3)凡报到3的~

先问下逻辑,你是要从1数到3,数3的出局,然后第4个人又数1,以此类推吗?

大致的思路:定义list集合,利用for循环添加1—n元素,利用if判断,对3取余为0的删除,查看最终输出结果。试着自己做,不懂再问

这么经典的面向对象题目    以下代码仅供参考

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
int n;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个正整数:");
n = scanner.nextInt();
scanner.close();

PersonQuan personQuan = new PersonQuan();
Person person;
for (int i = 1; i <= n; i++) {
person = new Person(i);
personQuan.addPerson(person);
}

n = 0;
person = personQuan.first;
while (personQuan.first != personQuan.last) {
n++;
if (n % 3 == 0) {
//System.out.println("第" + n/3 + "次移除编号:" + person.id);
personQuan.removePerson(person);
}
person = person.right;
}

System.out.println("最后留下的是第" + personQuan.first.id + "号");

}

}

class Person {
int id;
Person left;
Person right;

public Person(int id) {
this.id = id;
}

}

class PersonQuan {

Person first;
Person last;

public void addPerson(Person person) {
if (first == null) {
first = person;
last = person;
person.left = person;
person.right = person;
} else {
last.right = person;
person.left = last;
person.right = first;
first.left = person;
last = person;
}
}

public int removePerson(Person person) {
if (first == last) {
return 0;
}

if (person == first) {
last.right = person.right;
person.right.left = last;
first = person.right;
} else if (person == last) {
first.left = person.left;
person.left.right = first;
last = person.left;
} else {
person.left.right = person.right;
person.right.left = person.left;
}
return 1;
}

}


java编程 有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3...
答:public class Increase {public static void rep(boolean[] people) {int i = 0,j=0,n=people.length,m=n;while(n>2){i=++i%m;if (people[i] == true){j++;if (j==3){people[i] = false;System.out.println(i);n--;//总人数减1j = 0;//到3从头数}}}public static void...

java编程,有n个人围成一圈,顺序排号,从一号到n号,从第一个开始报数...
答:import java.util.Scanner;public class Main {public static void main(String[] args) {int n;Scanner scanner = new Scanner(System.in);System.out.println("请输入一个正整数:");n = scanner.nextInt();scanner.close();PersonQuan personQuan = new PersonQuan();Person person;for (int ...

编程:n个人围一圈,按1至n编号。
答:由于最终计算出的f(n)是从0开始的,f(n)再加1即为最后一人员对应的数字。以java代码为例,代码如下:public class Test { public static void main(String[] args) { int n = 5, m = 3;if (n < 1 || m < 1) { System.out.println("parameters error!");return;} System.out.pri...

用JAVA编写,有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3...
答:大致的思路:定义list集合,利用for循环添加1—n元素,利用if判断,对3取余为0的删除,查看最终输出结果。试着自己做,不懂再问

采用java语言编写,编号为1,2,3,4...n的一群人沿顺时针方向围城一圈的...
答:public class Baoshu { public static void main(String[] args) { int n[]={1,2,3,4,5,6,7}; int m=3; abc(n,m); } public static void abc(int n[],int m){ List result = new ArrayList(); int j=n.length; int c=m; while(j>0){ ...

出圈问题:出圈,n个围成一圈,数到第m个人出圈,再从m个人的下一个人数...
答:int a[]=new int[n];for(int i=0;i<a.length;i++){a[i]=i+1;} while(outNum<n){//出圈的人数小于总人数 tmp=m;while(tmp>0){//还没数到m countOne=false;while(!countOne){//数一个有效的人 if(a[index]!=-1){//如果这个人没有出圈,则这个计数有效,否则跳过这个人,...

[题目描述]n个人围成一圈,按1-n给每个人编号,m为要报的数,报数从编号为...
答:设有n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数 (用数学方法解的时候需要注意应当从0开始编号,因为取余会取到0解。)实质是一个递推,n个人中最终留下来的序号与n-1个人中留下来的人的序号有一个递推关系式。假设除去第k个人,则 0, 1, 2, 3...

n个人围一圈按1~n给每人编号m为要报的数,编号1的人开始报到m的倍数人...
答:int n=0;public void get_n(int n){ this.n=n;} node firstnode=null,temp=null;int i=0;public void linklist(){ for(i=1;i<=n;i++){ if(i==1){ node node1=new node(i);firstnode=node1;temp=node1;}else if(i!=n){ node node2=new node(i);temp.nextnode=node2;...

java编程17人编号为0-16围成一圈,0号人开始从1报数,凡是报数为3倍数的...
答:解答如下:依据提议,可以将题目等价变换为:“n(n=17)人编号为0到(n-1)围成一圈,0号人开始从0报数,凡是报数为m-1 (m=3)倍数的人离开圈子,继续到一个,问他编号”一开始的状态 0,1,2,3,4,5 ... (n-2), (n-1) 【n个人】第一个人被踢之后 设第一个被踢的人的编号为k,...

JAVA围圈报数 问题
答:{ public static void main (String[] args) throws java.lang.Exception { // your code goes here countThree(50, 0, 3);} / param n 人的总数 param start 开始报数的序号,start < n param m 出列的标记(可以大于n)/ private static void countThree(int n, int start, int...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网