题目描述:
设有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; } }