链接:
题意:
环形1到n,从1开始,每次移动 第i次*k ,当移动到出现过的序号时停下,
求没移动到的数字
解:
简单模拟题,我也以为有数学做法,可恶
实际代码:
c++
#include<bits/stdc++.h>
using namespace std;
vector<int> circularGameLosers(int n, int k)
{
set<int>get;get.insert(1);
vector<int>ans;
int now=1,nextMove=k;
while(true)
{
now=(now+nextMove-1)%n+1;
if(get.count(now)==1) break;
get.insert(now);
nextMove+=k;
}
//cout<<endl;
for(int i=1;i<=n;i++) if(get.count(i)==0) ans.push_back(i);
return ans;
}
int main()
{
int n,k;cin>>n>>k;
vector<int>ans=circularGameLosers(n,k);
for(auto& a:ans) cout<<a<<endl;
return 0;
}
限制:
1 <= k <= n <= 50