数组算法取值

问:对给定的两个正整数n和m,编号为1 - n的n个人围坐一圈,从1号起连续报数,报道m者出局。剩下的人从当前位置开始从1起报数,报道m者出局......循环往复,直至剩下最后一个人。问出局者顺序如何?剩下者的原始编号是几?剩下者的原始编号是几?例如,n=6,m=5时,该过程出局者顺序为5,4,6,2,3,剩下者的原始编号为1。



代码:


public class test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入n为:");
int n = scan.nextInt();
System.out.print("请输入m为:");
int m = scan.nextInt();

int num[] = new int[n+1];
num[0] = 0;
//获得数字,使数字与数组下标一致
for (int i = 1; i < n+1; i++) {
num[i]=i;
}

int count = 1;//作为num数组下标数
int number = 1;//作为数组里的数,,,,,看作报的数
int t = 0;//有n个数,出局次数也为n,用t记数次数
//当t==n时,代表所有数出局
while (t!=n) {
//当count下标数大于n使从1开始记起
if (count>n) {
count = 1;
}
//如果数组里的值为-1,表示那个数已经出局
if (num[count]!=-1) {
if (num[count]==m) {
num[count]=-1;//找到的数赋值为-1,出局
number = 1;
t++;
System.out.println("输出第"+t+"出局的数:"+count);//输出count下标,即出局数字
}else{
//不等于m的赋值为number,number与报数的顺序同步,当number==m即num[count]==m时,其下标count就是出局的数
num[count] = number;
number++;
}
}
count++;
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值