【出圈】

本文探讨了经典的约瑟夫环问题,通过编程的方式解决了一群人围成一圈并按特定规则逐个出圈的问题。提供了C++实现的示例代码,采用数组标记法来跟踪成员状态。

题目链接:http://115.28.203.224/problem.php?cid=1011&pid=3

题目描述

设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。

输入

输入多行,每行2个数,分别表示n和m.

输出

计算每一行中最后剩下这个人的编号.

样例输入

10 3

样例输出

4

代码

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int m, n, t;
 6     while(cin>>m>>n)
 7     {
 8         int flag[1000] = {0};
 9         t = m;
10         for(int i = 1,j = 1; ; i++, j++)
11         {
12             if(flag[j] == 1)
13                 i--;
14             if(i == n)
15             {
16                 flag[j] = 1;
17                 t--;
18                 i = 0;
19             }
20             if(j == m)
21                 j = 0;
22             if(t==1 && flag[j]==0 && j!=0)
23             {
24                 cout<<j<<endl;
25                 break;
26             }
27         }
28     }
29     return 0;
30 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值