1 条题解
-
0
C++ :
#include <iostream> using namespace std; int josephus(int n,int k,int m,int p){ int r = 0; for(int i=n-p+1;i<=n;i++) r = (r+k-1)%i+1; return (r+m-k%n-1+n)%n+1;} int main(){ for(int n,k,m,p;cin>>n>>k>>m>>p && !(n+m+k+p == 0);) cout<<josephus(n,k,m,p)<<endl; return 0;}
Java :
import java.util.*; public class Main { static ArrayList<Integer> list =null; private static Scanner in; public static void main(String[] args) { in = new Scanner(System.in); int n,k,m,p,a,c,count,temp=0,x=0; while(in.hasNext()){ count=1; x=0; n=in.nextInt(); k=in.nextInt(); m=in.nextInt(); p=in.nextInt(); if(n==0&&k==0&&m==0&&p==0) break; list = new ArrayList<Integer>(); creatList( n); if(m%n==0) m=n-1; else m=m%n-1; if(count==p){ System.out.println(list.get(m)); continue; } list.remove(m); while(list.size()!=1){ if(list.size()-m>k){ temp = list.get(m+k-1); list.remove(m+k-1); count++; m=m+k-1; }else if(list.size()-m<k){ c=k-(list.size()-m); a=0; while(true){ if(a+c<list.size()){ temp = list.get(a+c-1); list.remove(a+c-1); count++; m=a+c-1; break; } else if(a+c>list.size()){ c=c-(list.size()-a); a=0; }else{ temp = list.get(a+c-1); list.remove(a+c-1); count++; m=0; break; } } }else { temp = list.get(list.size()-1); list.remove(list.size()-1); count++; m=0; } if(count==p){ System.out.println(temp); x=1; break; } } if(list.size()==1&&x==0) System.out.println(list.get(0)); } } public static void creatList(int n){ for(int i=1;i<=n;i++){ list.add(i); } } }
- 1
信息
- ID
- 2134
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者