View Code of Problem 80

#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<cmath>
#include<cstdio>
using namespace std;
//约瑟夫环问题 
int main(void){
    int n,i;
    cin>>n;
    while(n!=0){
    	int f=0,t=0,s=0;
		bool a[101]={0};
		do
	    {
	        ++t;//逐个枚举圈中的所有位置
	        if(t>n)
	            t=1;//数组模拟环状,最后一个与第一个相连
	        if(!a[t])
	            s++;//第t个位置上有人则报数
	        if(s==3)//当前报的数是3
	        {
	            s=0;//计数器清零
	            a[t]=1;//此处人已死,设置为空
	            f++;//死亡人数+1
	        }
	    }while(f!=n-1);//直到所有人都被杀死为止
	    for(int i=1;i<=n;i++){
	    	if(a[i]!=1){
	    		cout<<i<<endl;
			}
		}
		cin>>n;
	}
	    
}

Double click to view unformatted code.


Back to problem 80