约瑟夫问题

本文详细介绍了经典的约瑟夫问题,通过环形数组模拟人员出列过程,使用C++语言实现了一个简单的解决方案,该算法能够高效地计算出圈序列。
题目背景

约瑟夫是一个无聊的人!!!

题目描述

n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.

输入输出格式

输入格式:

 

n m

 

输出格式:

 

出圈的编号

 

输入输出样例

输入样例#1:
10 3
输出样例#1:
3 6 9 2 7 1 8 5 10 4

思路:

此题的重点在于将数字连成一个环,并判处被排除的数字,是一个纯搜索的过程。

#include<iostream>
using namespace std;
int a[10000],m,n;
int main()
{
    cin>>n>>m;
    int t=0,s=0,f=0;
    do{
        s++;
        if(s==n+1)s=1;
        if(a[s]==0)
            t++;
        if(t==m){
            t=0;
            a[s]=1;
            cout<<s<<' ';
            f++;
        }
    }while(f!=n);
    return 0;
}

 





转载于:https://www.cnblogs.com/thmyl/p/7359404.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值