有编号从1到N的N个人坐成一圈报数,报到M的人出局,下一位再从1开始,如此持续,直止剩下一位为止,报告此人的编号X。输入N,M,求出X。
解决方案 »
- [java]win7安装jdk1.6没有自带数据库(derby)
- java的gui到底是如何画出来的呀?
- java 初学者的问题
- 如何用Java读取MP3文件的Tag信息?
- eclipse下的编译运行和直接通过JDK编译运行,到底有什么不同?竟出现奇怪的问题!!
- 为什么我在ContentPane中add一个component后,要改变Frame的大小才能显示正确???
- 帮忙下个CSDN上的资源。。
- 调用applet的问题,请近来看看
- applet中如何让一个图片成为按钮?
- 如何对java进行图形用户界面的增删改查
- 想要转移一个多级目录,而且要保证目录路径的一致性,请问大侠应该怎么作啊?
- 如何编译继承自定义包的JAVA文件
* Created on Mar 21, 2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*//**
* @author YongDongLiang
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Recursion1 {
private List men=null;
private int n;
private int m;
Recursion1(int n,int m){
this.n = n;
this.m = m;
men = new ArrayList();
for(int i=0;i<n;i++){
men.add(new Integer(i));
}
}
void getLastMan(){
System.out.println("size:"+men);
if(men.size()==1)return;
System.out.println("remove No."+m%men.size());
men.remove((m-1)%men.size()); //因为从第0开始
getLastMan();
}
void prt(){
getLastMan();
System.out.println("The last man is:"+men.get(0));
}
public static void main(String[] args){
new Recursion1(6,5).prt(); }
}
import java.util.*;/*
* Created on Mar 21, 2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*//**
* @author YongDongLiang
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Recursion1 {
private List men=null;
private int n;
private int m;
Recursion1(int n,int m){
this.n = n;
this.m = m;
men = new ArrayList();
for(int i=1;i<=n;i++){
men.add(new Integer(i)); //从1开始
}
}
void getLastMan(){
System.out.println("size:"+men+" *="+men.size());
if(men.size()==1) return;
int i = 0;
if(m%men.size()==0) i = men.size()-1;
else i = m%men.size()-1;
System.out.println("remove No."+i);
men.remove(i); //因为从第0开始
getLastMan();
}
void prt(){
getLastMan();
System.out.println("The last man is:"+men.get(0));
}
public static void main(String[] args){
new Recursion1(6,5).prt(); }
}
int M,X; //定义M,X
Vector v=new Vector();
for(int i=0;i<person.length;i++){
v.add(persion[i]);
}
while(v.size()>1){ int k=M%v.size(); //第几个人报到M
if(k==0) k=v.size();
k--; //数组下标比实际数小1
v.remove(k);
}String p=(String)v.get(0); //经过循环后集合v只有一个人;for(int i=0;i<person.length;i++){ //这个人再比对数组中的人,是哪一个,x
if(p.equal(persion[i])){
X=i+1;
}
}
public static final int N = 100;
public static final int M = 50;
private static LinkedList nums = new LinkedList();
static {
for(int i = 0; i < N; i++)
nums.add(new Integer(i+1));
}
public static void main(String[] args) {
System.out.println("N = " + N + ", M = " + M + ", " + (Integer)(remove(nums).get(0)) + " is left.");
}
public static LinkedList remove(LinkedList nums) {
int len = nums.size();
if(len == 1) return nums;
else {
nums.remove((M - 1) % len);
nums.add(nums.remove(0));
return (remove(nums));
}
}
}输出:
N = 100, M = 50, 31 is left.关键思路:
1. 用M-1和链表的长度求模来决定要移除的无素的位置
2. 移除元素后,移除第一个元素并添加到最后一个元素的后面欢迎大家评批指正!