1 条题解
-
0
C :
#include <stdio.h> int get(int n, int k) { int f = 0; for(int i = 1; i <= n; i++) f = (f + k) % i; return f; } int main() { int n, k, m; while(~scanf("%d%d%d", &n, &k, &m) && n) printf("%d\n", (get(n-1,k)+m)%n+1); return 0; }
C++ :
#include <iostream> using namespace std; int josephus(int n,int m,int k){ int r=1; for(int i=2;i<=n;i++) r=(r+m-1)%i+1; return (r+k-m%n+n-1)%n+1;} int main(){ for(int n,m,k;cin>>n>>m>>k && !(m==0 && n==0 && k==0);) cout<<josephus(n,m,k)<<endl;}
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,a,c; while(in.hasNext()){ n=in.nextInt(); k=in.nextInt(); m=in.nextInt(); if(n==0&&k==0&&m==0) break; list = new ArrayList<Integer>(); creatList( n); m=m-1; list.remove(m); while(list.size()!=1){ if(list.size()-m>k){ list.remove(m+k-1); m=m+k-1; }else if(list.size()-m<k){ c=k-(list.size()-m); a=0; while(true){ if(a+c<list.size()){ list.remove(a+c-1); m=a+c-1; break; } else if(a+c>list.size()){ c=c-(list.size()-a); a=0; }else{ list.remove(a+c-1); m=0; break; } } }else { list.remove(list.size()-1); m=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
- 2127
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者