洛谷 P1996 约瑟夫问题 题解

原题链接

经典题目来一发

提供两种做法(当然,做法还有很多)

以下两种为基础方法

one

直接模拟

数组01赋值记录状态

复制代码
#include<bits/stdc++.h>
using namespace std;
int n,m,i,a[150],num;
int main()
{
    cin>>n>>m;
    i=0;
    int j;
    while(num<n)
    for(j=1;j<=n;j++)
        if(a[j]==0)
        {
              i++;
              if(i%m==0) 
           {
            cout<<j<<" ";
            a[j]=1;
            num++;    
           } 
        } 
    return 0;
}
复制代码

two

数组实现链表

复制代码
#include<bits/stdc++.h>
using namespace std;
int a[150];
int n,m,i,j,num;
int main()
{   
    cin>>n>>m;
    for(i=1;i<=n-1;i++)
    a[i]=i+1;
    a[n]=1;
    i=1;j=n;
    while(num<n)
    {
        j=a[j];
        i++;
        if(i==m)
        {
            cout<<a[j]<<" ";
            a[j]=a[a[j]];
            num++;
            i=1;
        }
    }
    return 0;
}
复制代码

 

posted @ 2019-02-12 21:38  octal_zhihao  阅读(699)  评论(0)    收藏  举报
编辑推荐:
· 源码浅析:SpringBoot main方法结束为什么程序不停止
· C#性能优化:为何 x * Math.Sqrt(x) 远胜 Math.Pow(x, 1.5)
· 本可避免的P1事故:Nginx变更导致网关请求均响应400
· 还在手写JSON调教大模型?.NET 9有新玩法
· 复杂业务系统线上问题排查过程
阅读排行:
· AI 的力量,开发者的翅膀:欢迎使用字节旗下的 AI 原生开发工具 TRAE
· 「闲聊文」准大三的我,思前想后还是不搞java了
· C#性能优化:为何 x * Math.Sqrt(x) 远胜 Math.Pow(x, 1.5)
· 千万级的大表如何新增字段?
· 《HelloGitHub》第 112 期
点击右上角即可分享
微信分享提示