几道笔试题的解法(五)
2010-03-31 21:24
302 查看
题目: 有编号从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';
}
分析:本题是著名的约瑟夫问题。
代码如下:
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';
}
相关文章推荐