问题描述
现有n个同学站成一圈,顺时针编号1至n。从1号同学开始顺时针1/2报数,报到1的同学留在原地,报到2的同学退出圆圈,直到只剩一名同学为止。问最后剩下的同学编号。
输入格式
仅一行,一个正整数n。
输出格式
仅一行,一个正整数。
样例输入
400
样例输出
289
思路:刚看以为是约瑟夫环问题,但是好像给想复杂了,然后借鉴了大哥的解法~~
详情:https://blog.youkuaiyun.com/a1439775520/article/details/105853821/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int people = 0;
for (int i = 1; i <= n; i++) {
people = (people + 2) % i; // 倒着想
}
System.out.println(people + 1); // 直到剩最后一名,所以要+1
}
}
本文探讨了一个类似于约瑟夫环的问题,但规则有所不同。在n个同学围成的圈中,按特定规则淘汰直至剩下一人。文章提供了一种高效算法实现,并附带代码示例。
9534

被折叠的 条评论
为什么被折叠?



