约瑟夫问题

题目背景

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

题目描述

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;
}

 





posted @ 2016-11-08 20:31  Echo宝贝儿  阅读(266)  评论(0编辑  收藏  举报