**
蓝桥杯练习 书院主持人
**
思路:
(1)数组存放每一位同学
(2)每次从头开始报数,第b名同学从数组删除
(3)直至只剩下一名同学
实现过程
(1)输入同学数a约定数b
(2)实现数组存储每一位同学
(3)递归算法循环删除落选同学,直至只剩一名同学
(4)返回结构输出同学编号
import java.util.Scanner;
public class one {
public static void main(String[] args) {
// TODO Auto-generated method stub
//实现输入a和b
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int[] arr=new int[a];
//数组存储每一位同学
for(int x=0;x<arr.length;x++) {
arr[x]=x+1;
}
//调用递归算法选出主持人
n(arr, b);
}
public static void n(int[] arr,int b) {
//变量存储每一次的约定数
int c=b;
//递归条件
if(arr.length==1) {
System.out.println(arr[0]);
return;
}else {//每删除一名同学,调用一次n函数。递归核心
int[] arr1=new int[arr.length-1];
for(int x=0;x<arr.length-1;x++) {
if(b<=arr.length) {
if(b==arr.length) {
b=0;
}
arr1[x]=arr[b];
b++;
}else {
b=b%arr.length;
if(b==arr.length) {
b=0;
}
arr1[x]=arr[b];
b++;
}
}
n(arr1,c);
}
}
}
//
//
//北大附中书院有m个同学,他们每次都很民主地决策很多事情。按罗伯特议事规则,需要一个主持人。
//同学们民主意识强,积极性高,都想做主持人,当然主持人只有一人。为了选出主持人,他们想到了一个办法并认为很民主。方法是:
//大家围成一圈,从1到m为每个同学编号。然后从1开始报数, 数到n的出局。剩下的同学从下位开始再从1开始报数。最后剩下来的就是主持人了。
//现在已经把同学从1到m编号,并约定报数为n的出局,请编程计算一下,哪个编号的同学将会成为主持人。