题目: 有编号从1到N的N个人坐成一圈报数,报到M的人出局,下一位再从1开始,如此持续,直止剩下一位为止,报告此人的编号X。输入N,M,求出X
分析:本题是著名的约瑟夫问题。
代码如下:
int SumResult(int N, int M) { int i = 0; int k = 0; for (i = 1; i <= N; i++) { k = (k + M) % i; } return ++k; } int main(void) { int n = 0; int m = 0; std::cout << "Please input two numbers to operate: " << '/n'; std::cin >> n >> m; int lef = SumResult(n, m); std::cout << "The last one is " << lef << '/n'; }