SDUT 1197 约瑟夫问题

来源:互联网 发布:ubuntu更新命令 编辑:程序博客网 时间:2024/05/21 09:47

约瑟夫问题

Time Limit: 1000MSMemory Limit: 65536KB
SubmitStatisticDiscuss

Problem Description

n个人想玩残酷的死亡游戏,游戏规则如下:

n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。

请输出最后一个人的编号。

Input

输入n和m值。

Output

输出胜利者的编号。

Example Input

5 3

Example Output

4

Hint

第一轮:3被杀第二轮:1被杀第三轮:5被杀第四轮:2被杀 
#include<stdio.h>int main(){    int n,m,re_n,i,count;    scanf("%d %d",&n,&m);    int peo[n];    for(i=0;i<n;i++)        peo[i]=1;    re_n=n;//报数前圈子里的人数    i=n-1;//报数的为下一个人    while(re_n>1)    {        count=0;        while(count<m)        {            i=(i+1)%n;            if(peo[i])                count++;        }        re_n--;//报m的人出局,人数减一        peo[i]=0;    }    for(i=0;i<n;i++)    {        if(peo[i])        {            printf("%d\n",i+1);            break;        }    }    return 0;}




原创粉丝点击