public class Josephus { public static void main(String args[]) {
int n =Integer.parseInt(args[0]) ;
int m =Integer.parseInt(args[1]) ;
int j;
int jj;
int jjj;
int jjjj;
int jjjjj;
int k;
int a[] = new int[n];
int b[] = new int[n];
for (jjj = 0; jjj < n; jjj++) {
a[jjj] = jjj + 1;
}
for (int i = n; i > 1; i--) {
k = m % i;
for (j = 0; j < (i - 1) && k < i; j++, k++) {
b[j] = a[k];
}
for (jj = j, k = 0; jj < i && k < (m % i - 1); jj++, k++) {
b[jj] = a[k];
}
for (jjjjj = 0; jjjjj < n; jjjjj++) {
a[jjjjj] = b[jjjjj];
b[jjjjj] = 0;
}
}
for (jjjj = 0; jjjj < n; jjjj++) {
if (a[jjjj] != 0) {
System.out.println(a[jjjj]);
}
}
}
}
这个问题面试了两次了,
结果,
都是糊过去的,
心理不甘!但是自己又不能解决 ,在网上搜索了很久,结果是还报错的程序,当然也改不了拉~!
我这里抛砖引玉!,
有谁能说出它的思想,策略,最好是有原代码大家会一定感激不尽 !
int n =Integer.parseInt(args[0]) ;
int m =Integer.parseInt(args[1]) ;
int j;
int jj;
int jjj;
int jjjj;
int jjjjj;
int k;
int a[] = new int[n];
int b[] = new int[n];
for (jjj = 0; jjj < n; jjj++) {
a[jjj] = jjj + 1;
}
for (int i = n; i > 1; i--) {
k = m % i;
for (j = 0; j < (i - 1) && k < i; j++, k++) {
b[j] = a[k];
}
for (jj = j, k = 0; jj < i && k < (m % i - 1); jj++, k++) {
b[jj] = a[k];
}
for (jjjjj = 0; jjjjj < n; jjjjj++) {
a[jjjjj] = b[jjjjj];
b[jjjjj] = 0;
}
}
for (jjjj = 0; jjjj < n; jjjj++) {
if (a[jjjj] != 0) {
System.out.println(a[jjjj]);
}
}
}
}
这个问题面试了两次了,
结果,
都是糊过去的,
心理不甘!但是自己又不能解决 ,在网上搜索了很久,结果是还报错的程序,当然也改不了拉~!
我这里抛砖引玉!,
有谁能说出它的思想,策略,最好是有原代码大家会一定感激不尽 !
import java.util.*;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(); }
}