约瑟夫问题

来源:互联网 发布:vb do while循环语句 编辑:程序博客网 时间:2024/06/02 05:54
题目背景

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

题目描述

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

 




0 0
原创粉丝点击