大家帮我看看这段代码是怎么回事!

中华神鸟 中华神鸟 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

/**
题目:一个有n人的队列站成一排,依次报数,报3的人出列,下一位继续从1开始报数,报3的出去……
报完后再从头接着报,直到最后剩一个人,编程找出最后一个人原来排第几位。
*/
class Example_1
{
public static int find(int n)//n为队列的总人数
{
int []sequence = new int[n];//定义一个数组用来存放队列中人物所对应的编号
for(int q = 1; q <= n; q++)
{
sequence[q - 1] = q;//为队列中的每一个人按位置编号
}

int j = 2;//用j来记录每一轮出列的第一个人所在数组元素的下标
int i = j;
while(n > 1)//一直循环到最后一个人
{
for(i = j; i < n; i += 2)
{//这里步长设为2而不设为3是因为每次删除一个元素后数组整体前移一位,原来的下一位成了现在的当前位
for(int k = i; k < n - 1; k++)
{
sequence[i] = sequence[i + 1];//删除下标为i的数组元素
}
n -= 1;//删除后数组长度减1
}
j = i - n;//计算下一轮第一个要删除的人所在数组元素的下标
}

return sequence[0];//返回最后一个人原来的位置
}

public static void main(String[] args)
{
System.out.println(find(12));
}
}//未调试成功,与预期值不符(8以及大于10的值不相同)

为什么数字较小时正常,稍大一点就不行了呢?
...全文

相关推荐

评论 20
收藏 已收藏
分享
返回顶部
中华神鸟
Java SE 62,620 成员 307,251 内容