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

被折叠的 条评论
为什么被折叠?



