有500个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出
有500个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。用JAVA实现...
有500个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。用JAVA 实现
展开
展开全部
import java.util.LinkedList;
class removeNM {
public static int removeNM(int n, int m) {
LinkedList ll = new LinkedList();
for (int i = 0; i < n; i++)
ll.add(new Integer(i + 1));
System.out.println(ll);
int removed = -1;
while (ll.size() > 1) {
removed = (removed + m) % ll.size();
ll.remove(removed--);
}
return ((Integer) ll.get(0)).intValue();
}
public static void main(String[] args) {
System.out.println(removeNM(500, 3));
}
}
class removeNM {
public static int removeNM(int n, int m) {
LinkedList ll = new LinkedList();
for (int i = 0; i < n; i++)
ll.add(new Integer(i + 1));
System.out.println(ll);
int removed = -1;
while (ll.size() > 1) {
removed = (removed + m) % ll.size();
ll.remove(removed--);
}
return ((Integer) ll.get(0)).intValue();
}
public static void main(String[] args) {
System.out.println(removeNM(500, 3));
}
}
展开全部
//利用对象和递归 (结果436)
import java.util.ArrayList;
public class T {
public static void main(String[] arg){
//人数=500,出局者在3次之后
b(500,3); //利用对象
c(500,3); //递归算法
}
//利用对象
private static void b(int count,int out) {
ArrayList<Child> l = new ArrayList<Child>();
while(count-->0)l.add(new Child());
int x=0;
while(l.size()>1){
for(Child c:l){
++x;
if(x%(out)==0)
c.out=true;
}
for(int i=0; i<l.size(); i++)
if(l.get(i).out)
l.remove(i);
}
System.out.println("Last: "+l.get(0).id);
}
//递归算法
private static void c(int count,int out){
ArrayList<Integer> l = new ArrayList<Integer>();
for(int i=0; i<count; i++)
l.add(i+1);
l = x(l,0,out);
System.out.println("Last: "+l.get(0));
}
private static ArrayList<Integer> x(ArrayList<Integer> al,int c,int out){
if(al.size()>1){
c+=out-1;
al.remove(c=c%al.size());
return x(al,c,out);
}
return al;
}
}
class Child{
static int index;
int id=++index; //编号,第一个对象将被标志为1
boolean out; //出局标志
}
import java.util.ArrayList;
public class T {
public static void main(String[] arg){
//人数=500,出局者在3次之后
b(500,3); //利用对象
c(500,3); //递归算法
}
//利用对象
private static void b(int count,int out) {
ArrayList<Child> l = new ArrayList<Child>();
while(count-->0)l.add(new Child());
int x=0;
while(l.size()>1){
for(Child c:l){
++x;
if(x%(out)==0)
c.out=true;
}
for(int i=0; i<l.size(); i++)
if(l.get(i).out)
l.remove(i);
}
System.out.println("Last: "+l.get(0).id);
}
//递归算法
private static void c(int count,int out){
ArrayList<Integer> l = new ArrayList<Integer>();
for(int i=0; i<count; i++)
l.add(i+1);
l = x(l,0,out);
System.out.println("Last: "+l.get(0));
}
private static ArrayList<Integer> x(ArrayList<Integer> al,int c,int out){
if(al.size()>1){
c+=out-1;
al.remove(c=c%al.size());
return x(al,c,out);
}
return al;
}
}
class Child{
static int index;
int id=++index; //编号,第一个对象将被标志为1
boolean out; //出局标志
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最后留下的是原来的第一个人
public class FindTheLast {
public static void main(String[] args) {
int a[] = new int[500];
int p = 0;
int k = 0;
for(int i = 0;i<500;i++){
a[i]=1;
}
System.out.print("依次出圈的人的号码为:");
while(p<499){
int x = 0;
while(x<3){
k++;
if(k>=500)
k=1;
x+=a[k];
}
a[k]=0;
System.out.print(k+"-->");
p++;
}
System.out.println();
for(int i = 0;i<500;i++)
if(a[i]==1)
System.out.println("最后留下的人是原来的第"+(i+1)+"个人");
}
}
public class FindTheLast {
public static void main(String[] args) {
int a[] = new int[500];
int p = 0;
int k = 0;
for(int i = 0;i<500;i++){
a[i]=1;
}
System.out.print("依次出圈的人的号码为:");
while(p<499){
int x = 0;
while(x<3){
k++;
if(k>=500)
k=1;
x+=a[k];
}
a[k]=0;
System.out.print(k+"-->");
p++;
}
System.out.println();
for(int i = 0;i<500;i++)
if(a[i]==1)
System.out.println("最后留下的人是原来的第"+(i+1)+"个人");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用递归
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在日本电影中‘又吗代’是什么意思啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |