题目描述
现在有n个竞争者围坐一圈,争夺一个很有吸引力的工作(年薪100w $)。假设这些人编号1,2,。。。,n。第一次从1开始报数,数到m(m>0)的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列。以此类推,直到所有人出列为止。老板说最后一个出列的人将获得这份工作。 如果你也想竞争这份工作,那么你会坐着哪个位置上? 编写一个程序,当老板告诉你n和m时,返回得到工作的那个人的编号。如果输入异常,返回-1。
输入
输入两个数字,如 10,10。
输出
输出对应的位置,如 8。
样例输入
10,10
样例输出
8
提示
1.编写一个main函数实现该功能算法。
地区
南京研究所
public static void main(String[] args) {
int n=0,m=0;
Scanner sc=new Scanner(System.in);
try{
String[] input=sc.next().split(",");
n=Integer.parseInt(input[0]);
m=Integer.parseInt(input[1]);
}catch(Exception ex){
System.out.print("-1");
return ;
}
List<Integer> list=new ArrayList<Integer>();
for(int i=1;i<=n;i++){
list.add(i);
}
int i=0;//从1开始报数
while(list.size()>1){//利用约瑟夫环解决
i=(i+m-1)%list.size();
list.remove(i);
}
System.out.print(list.get(0));
}