约瑟夫问题

来源:互联网 发布:cf网络异常23 2 编辑:程序博客网 时间:2024/06/07 07:25

问题描述

有n个人围成一圈,并给人编号,从1号开始,说yes,接着的那个人说no。圈中的说no的人都要出列,问最后剩下的那个人的编号。

代码

#include<iostream>using namespace std;int main(){    int n = 0, count = 0,temp = 0;    int *p;    cin>>n;    temp = n;    p = (int *)malloc(sizeof(int)*n);    for(int j = 0; j < n; j++)            p[j] = 1;    while(temp>1)    {        for(int i = 0; i< n; i++)        {            if(p[i] == 1)                count++;            if(count%2 == 0 && p[i] ==1 )            {                p[i] = 0;                temp--;                if(temp == 1)                    break;            }        }        }    for(int k = 0; k < n; k++)    {        if( p[k] == 1)            cout<<"剩下的是"<<(k+1)<<endl;    }    free(p);}