文章

52

粉丝

68

获赞

22

访问

11.6k

头像
约瑟夫问题的实现 题解:Vector向量解法
P5104
发布于2025年1月26日 15:05
阅读数 81

这里根据本题,提供两个约瑟夫问题的题解,我们依靠动态链接库里面的向量辅助处理,方便的处理中间的的元素的删除,当然,如果你的学校不支持这个,我建议你采用循环链表,标记0位置即可达到同样的目的

  1. 此段代码为题解,n为数量,m为步数
    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        int n,m;
        while(cin>>n>>m){
            vector<int>a(n);
            for(int i=0;i<n;i++){
                a[i]=i+1;
            }
            int p=0;
            m=m-1;
            while(a.size()>1){
                p=p+m>=a.size()?(p+m)%a.size():p+m;
                a.erase(a.begin()+p);
            }
            cout<<a[0]<<endl;
        }
    }
  2. 此段代码为扩展内容:
    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        int n,p,m;
        while(cin>>n>>p>>m){
            vector<int>a(n);
            for(int i=0;i<n;i++){
                a[i]=i+1;
            }
            p=p-1;
            m=m-1;
            string ans="";
            while(a.size()>1){
                p=p+m>=a.size()?(p+m)%a.size():p+m;
                char c=a[p]+'0';
                ans=ans+c+',';
    ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发