CG 01ジョセフ問題
【問題の説明】
ジョセフと彼の仲間はN人で輪を作った.輪の位置によって、一人一人に番号があります.1からNまでです.最後の人Nは最初の人1番とつながっています.
今彼らはリーダーを選出しなければならない.選択方法は、1日からM人ごとに1人を淘汰し、最後に残った人がリーダーです.
例えば7人がいて、Mは3で、つまり3人ごとに1人を淘汰することを約束しました.では、まず3番を淘汰し、6番、2番、7番、5番、1番を順番に淘汰し、最後に残りの4番がリーダーです.
ジョセフはこのリーダーになりたいと思っています.では、NとMを与えた後、ジョセフにリーダーになるには何番でなければならないか教えてもらえますか.
【入力形式】
最初の行の正の整数t(10≦t≦100)を入力し、テストデータのセットがどれだけあるかを示します.
後ろにt行があり、各行に2つの正の整数N,M(2≦M≦20)があり、中間は1つのスペースで区切られている.
40%のテストデータ1≦N≦10;
30%のテストデータ1≦N≦102;
20%のテストデータ1≦N≦103;
10%のテストデータ1≦N≦104;
【出力形式】
各テストデータのセットについて、正の整数が1行を占める:ヘッダの番号を出力します.
【サンプル入力】
4 1 3 7 3 2 3 4 2
【サンプル出力】
1 4 2 1
ジョセフループ–数式法【繰返し式】
ジョセフと彼の仲間はN人で輪を作った.輪の位置によって、一人一人に番号があります.1からNまでです.最後の人Nは最初の人1番とつながっています.
今彼らはリーダーを選出しなければならない.選択方法は、1日からM人ごとに1人を淘汰し、最後に残った人がリーダーです.
例えば7人がいて、Mは3で、つまり3人ごとに1人を淘汰することを約束しました.では、まず3番を淘汰し、6番、2番、7番、5番、1番を順番に淘汰し、最後に残りの4番がリーダーです.
ジョセフはこのリーダーになりたいと思っています.では、NとMを与えた後、ジョセフにリーダーになるには何番でなければならないか教えてもらえますか.
【入力形式】
最初の行の正の整数t(10≦t≦100)を入力し、テストデータのセットがどれだけあるかを示します.
後ろにt行があり、各行に2つの正の整数N,M(2≦M≦20)があり、中間は1つのスペースで区切られている.
40%のテストデータ1≦N≦10;
30%のテストデータ1≦N≦102;
20%のテストデータ1≦N≦103;
10%のテストデータ1≦N≦104;
【出力形式】
各テストデータのセットについて、正の整数が1行を占める:ヘッダの番号を出力します.
【サンプル入力】
4 1 3 7 3 2 3 4 2
【サンプル出力】
1 4 2 1
#include
using namespace std;
int Win(int n,int m)// ,
{
int i,s=0;
for (i=2;i<=n;i++)
{
s=(s+m)%i;}
return s+1;
}
int main()
{
int t;
cin>>t;
for(int i=0;i<t;i++)
{
int n,m;
cin>>n>>m;
cout<<Win(n,m)<<endl;
}
return 0;
}
ジョセフループ–数式法【繰返し式】