约瑟夫问题
题目背景
约瑟夫是一个无聊的人!!!
题目描述
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; }