zoukankan      html  css  js  c++  java
  • 【题解】约瑟夫问题

    题目描述

    nn 个人围成一圈,从第一个人开始报数,数到 mm 的人出列,再由下一个人重新从 11 开始报数,数到 mm 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。

    输入格式
    输入两个整数 n,mn,m。

    输出格式
    输出一行 nn 个整数,按顺序输出每个出圈人的编号。

    输入输出样例
    输入 #1
    10 3
    输出 #1
    3 6 9 2 7 1 8 5 10 4
    说明/提示
    1 le m, n le 1001≤m,n≤100


    模拟

    模拟这个过程,然后接下来一个一个去做,vis记录全过程。但必须要开始将其值设置为flase。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,m,ans=0;
     4 bool vis[1000]={0};
     5 int main(){
     6     cin>>n>>m;
     7     for(int i=0;i<n;i++){
     8         for(int i=0;i<m;i++){
     9             ans++;
    10             if(n<ans)ans=1;
    11             if(vis[ans])i-=1;
    12         }
    13         cout<<ans<<" ";
    14         vis[ans]=1;
    15     }
    16     return 0;
    17 }

    队列

    与模拟差不多。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,m,ans=1;
     4 queue<int> qu;
     5 int main(){
     6     cin>>n>>m;
     7     for(int i=1;i<=n;i++){
     8         qu.push(i);
     9     }
    10     while(!qu.empty()){
    11         if(ans==m){
    12             cout<<qu.front()<<" ";
    13             qu.pop();
    14             ans=1;
    15         }else{
    16             ans++;
    17             qu.push(qu.front());
    18             qu.pop();
    19         }
    20     }
    21     return 0;
    22 }
  • 相关阅读:
    php解析文本文件呈现在表格上
    nyoj 1058部分和问题
    nyoj 488素数环
    nyoj 82迷宫寻宝(一)
    nyoj58最少步数
    nyoj 325 zb的生日
    nyoj 20 吝啬的国度
    nyoj 349 Sorting It All Out
    nyoj 284
    PPT基础整理
  • 原文地址:https://www.cnblogs.com/rebirth-death2019/p/13778650.html
Copyright © 2011-2022 走看看