JAVA-蓝桥杯-算法提高-书院主持人

问题描述
  北大附中书院有m个同学,他们每次都很民主地决策很多事情。按罗伯特议事规则,需要一个
  主持人。同学们民主意识强,积极性高,都想做主持人,当然主持人只有一人。为了选出主
  持人,他们想到了一个办法并认为很民主。方法是:
  大家围成一圈,从1到m为每个同学编号。然后从1开始报数, 数到n的出局。剩下的同学从下
  位开始再从1开始报数。最后剩下来的就是主持人了。现在已经把同学从1到m编号,并约定报
  数为n的出局,请编程计算一下,哪个编号的同学将会成为主持人。
输入格式
  一行,由空格分开的两个整数m n。
输出格式
  一个整数,表示主持人的编号

代码如下:

import java.util.Scanner;


public class 书院主持人 {
     

	/**
	 * @param args
	 */
	public static void main(String[] args) {
     
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in); 
	    int n = sc.nextInt();
	    int m = sc.nextInt();
	    int count = 0;  //用来计数
	    int arr[]=new int[n]; //定义一个数组,对学生用来编号
	    for (int i = 0; i <n; i++) {
     
			arr[i]=i+1; //把每个学生都用数字1-n来表示
		}
	    for (int i = 0; i<n; i++) {
     
	    	if (count==n*m-m) {
       //这个是判断count的总数,当总数为n*m-m的时候就直接退出,
	    		break;             //当满足这个条件的时候就只剩下一个同学了也就是最后的主持人
			}		
			if (arr[i]!=0) {
      //不等于0就计数,因为下面我直接把退出的人员编号为0
				count++;
			}
			if (count%m==0) {
      //如果count能够整除m则是需要踢出局的人
				arr[i]=0;
			}
			if(i==n-1){
      //这是为了继续循环
				i=-1;
			}
		}
	    for (int i = 0; i < arr.length; i++) {
     
			if (arr[i]!=0) {
       //最后输出不是0的那个数,就是主持人的编号
				System.out.println(i+1);
				break;
			}
		}
	}

}

程序调试结果如下

200 55
 
93

你可能感兴趣的:(JAVA蓝桥杯,java)