使用queue<int>q记得加上头文件#include<queue>
⭐每次移动的个数相等&&输出最后剩下的编号
剑指 Offer 62. 圆圈中最后剩下的数字 - 力扣(LeetCode)
class Solution { public: int lastRemaining(int n, int m) { int p=0; for(int i=2;i<=n;i++)//从2开始,并且< =n { p=(p+m)%i; } return p; } };
⭐.每次移动的个数相等&&输出每次删除的编号
坑
也不行
正确写法(对于这种 输出被删除的元素)
#include<iostream> #include<queue>//头文件 using namespace std; int t,n,sum; int main(){ cin>>t; while(t--){ queue<int> q; cin>>n; sum=0; for(int i=1;i<=n;i++) q.push(i); while(q.size()){ int x=q.front(); q.pop(); sum++; if(sum==3)//关键点 { printf("%d ",x); sum=0; }else q.push(x); } puts(""); } return 0; }
⭐每次移动的个数 不 相等
视频讲解: AcWing 4400. 玩游戏(AcWing杯 - 周赛) - AcWing
#include <iostream> #include <queue> using namespace std; const int N = 100010; int a[N]; int main() { int n,k; cin>>n>>k; queue<int> q; for (int i = 1; i <= n; i ++ )//n个小朋友,所以i< n { q.push(i); } while(k--) { int a; cin>>a; a%=q.size(); for (int i = 0; i < a; i ++ )//注意是i< a { q.push(q.front()); q.pop(); } cout<<q.front()<<' '; q.pop(); } return 0; }