题目描述
1st Academy is an international leadership training academy based in Kuala Lumpur. Every year, the company trains thousands of people to be supplied to companies around the world.
To be fair amongst all the trainees, the company will do the selection process using numbering system. The trainees will choose a number from 1 to N, and one number is not limited to only one trainee. The N represents the total number of companies that request trainees from the academy. A number, M, would be picked at random, and the selection starts with a trainee whose number is 1, and then in every M’th people after that, wrapping around to 1 after N, and ignoring trainees already selected. For example, if N = 15 and M = 6, trainees would be selected in the order: 6, 12, 3, 10, 2, 11, 5, 15, 13, 9, 14, 4, 1, 8, 7. All the selected trainees except the last one (which is number 7) will be supplied to companies outside of Malaysia.
However, Leong preferred to stay and work in Malaysia. To him, there is no better place other than Malaysia. He does not mind being located anywhere as long it is Malaysia. As a friend of him, you could help him to choose a number that will save him from being located outside.
输入
Input will consist of a series of lines, each line containing the number of companies (N) with 1 ≤ N ≤ 1500, and a skipping value (M) with 1 ≤ M ≤ 50. The values will be terminated by a line consisting of double zeros (0 0) as shown in sample input output.
输出
Output will consist of a series of lines, one for each line of the input. Each line will consist of the number M according to the above scheme.
样例输入
15 6 550 23 0 0
样例输出
7 470
题意:给定数n和m,从1-n中,从temp=0开始,每次选择第temp+m个数,输出最后一个被选择的数
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
int temp=0;
int vis[1510];
for(int i=1;i<=n;i++)
vis[i]=i;
while(1)
{
temp+=m;
temp%=n;
if(temp==0)
{
temp=n;
}
for(int i=temp;i<n;i++)
vis[i]=vis[i+1];
vis[n]=0;
n--;
temp--;
if(vis[2]==0)
break;
}
printf("%d\n",vis[1]);
}
return 0;
}