文章

52

粉丝

68

获赞

22

访问

11.6k

头像
击鼓传花 题解:vector手撕约瑟夫
P1018 贵州大学机试题
发布于2025年1月27日 11:38
阅读数 78

#include <bits/stdc++.h>
using namespace std;

int main(){
    int n;
    while(cin>>n){
        vector<int>a(n);
        for(int i=0;i<n;i++)a[i]=i+1;
        int k=0;
        while(a.size()>1){
            k=k+2>=a.size()?(k+2)%a.size():k+2;
            a.erase(a.begin()+k);
        }
        cout<<a[0]<<endl;
    }
}

跨步其实是2,虽说是3,index增长是2,然后第一个人不删除,删除后面的开始启动,如果反转这个情况,我们需要先删除后修正

登录查看完整内容


登录后发布评论

1 条评论
RingoCrystal
2025年1月27日 11:39

本题本质上是约瑟夫问题的基础形式,在数量级很小的时候,可以采用栈和向量求解(vector就是向量)

赞(0)