LightOJ - 1179 Josephus Problem(约瑟夫环)

题目链接:https://vjudge.net/contest/28079#problem/G

题目大意:约瑟夫环问题,给你n和k(分别代表总人数和每次要数到k),求最后一个人的位置。

解题思路:因为n和k的范围都较大所以不能直接模拟,要推导出规律f(n) = (f(n-1) + k) % n。

代码:

 1 #include<iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 
 5 int main(){
 6     int T;
 7     scanf("%d",&T);
 8     int cas=0;
 9     while(T--){
10         int n,k;
11         scanf("%d%d",&n,&k);
12         int pos=0;
13         for(int i=2;i<=n;i++)
14             pos=(pos+k)%i;
15         printf("Case %d: %d\n",++cas,pos+1);
16     }
17 }

 

posted @ 2017-08-21 20:04  Yeader  阅读(196)  评论(0编辑  收藏  举报