题目描述:
设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。
输入:
输入多行,每行2个数,分别表示n和m.
输出:
计算每一行中最后剩下这个人的编号.
样例输入:
10 3
10 4
样例输出:
4
5
全部代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int m = sc.nextInt();
boolean[] persons = all(n,m);
for(int i=0; i<persons.length; i++)
{
if(persons[i])
{
System.out.println(i+1);
}
}
}
}
public static boolean[] all(int n,int m){
boolean[] persons = new boolean[n];
int number=n,key=0;
for(int i=0;i<n;i++)
{
persons[i]=true;
}
while(number!=1)
{
for(int i=0; i<n; i++)
{
if(!persons[i])
{
continue;
}
else
{
key++;
if(key%m==0)
{
persons[i]=false;
key=0;
}
}
}
number=0;
for(int i=0; i<n; i++)
{
if(persons[i])
{
number++;
}
}
}
return persons;
}
}