约瑟夫问题,自己模拟写的直接超时了,后面才知道约瑟夫问题是有规律的。
题目链接:约瑟夫问题
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int k=scanner.nextInt();
System.out.println(find(n,k));
}
public static int find(int n,int k){
int r=0;
for(int i=2;i<=n;i++){
r=(r+k)%i;
}
return r+1;
}
}
自己写的超时!
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int k=scanner.nextInt();
int now=0;//当前指针
ArrayList<Integer> a=new ArrayList<>();
for(int i=1;i<=n;i++){
a.add(i);
}
int i=0;//当前位置
while(a.size()!=1){
now++;
if(now==k){
Integer x=a.remove(i);//索引处
now=0;
}
else{
i++;
if(i==a.size()){
i=0;
}
}
}
System.out.println(a.get(0));
}
}