[洛谷] P1996 约瑟夫问题

题目:https://www.luogu.com.cn/problem/P1996

这是一道很典型的题(也是一道入门难度的模拟水题)

首先看看题目,乍一看是个模拟题

再看数据范围,1m,n100,一般来说O(n3 )以下的时间复杂度都ok(甚至更高) 

好家伙,这也就意味着不需要想什么精妙的算法,直接暴力模拟就可以。

 

代码如下

 

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int n,m;
 6 int vis[105]; //用于记录是否出列,坐标从1~n
 7 
 8 int main()
 9 {
10     cin>>n>>m;int now=0;//注意这里的处理
11     for(int i=1;i<=n;i++)
12     {
13         int cnt=0; //数到m个人的计数器
14         while(cnt<m)
15         {
16             now++;
17             if(now>n) now-=n;//边界处理
18             while(vis[now])
19             {
20                 now++;
21                 if(now>n) now-=n;
22             }//跳到下一个没有出列的人
23             cnt++;
24         }
25         vis[now]=1;
26         cout<<now<<" ";
27     }
28     return 0;
29  } 

 


唯一需要的大概就是细心吧

 

posted @ 2021-02-27 13:53  Adaxy  阅读(101)  评论(0)    收藏  举报