读书人

请解释一下代码 josephus 有关问题

发布时间: 2012-03-09 21:42:53 作者: rapoo

请解释一下代码 josephus 问题
int main(int argc, char* argv[])
{
const int num = 10;

int interval;

int a[num];

for(int i = 0;i < num; i++)
a[i] = i + 1;


cout < < "please input the interval: ";
cin> > interval;
cin.get();

for(int i = 0;i <num;i++)
{
cout < <a[i] < < ", ";

}
cout < <endl;

int k = 1;

int m = -1;

while(1) //??????
{
for(int j = 0; j < interval;)
{
m = (m + 1)%num; //?????
if(a[m]!=0) //??????
j++;
}

if(k == num) break;

cout < <a[m] < < ", ";
a[m]= 0;
k++;
}

cout < < "\nNo. " < <a[m] < < " boy 's win\n ";
cin.get();


请解释下后面打问号的代码

最难让我理解的是 while(1) 这是怎么回事呢? 请高手解答,谢谢!

[解决办法]
while(1) //??????死循环到break退出为止
{
for(int j = 0; j < interval;)
{
m = (m + 1)%num; //?????取m+1的个位数
if(a[m]!=0) //??????如果a[m]的值不为0
j++;
}

[解决办法]
while(1)
========
不达目的不罢休
[解决办法]
while (1) 这种写法 其实是利用C/C++ 语言 的特性,在逻辑表达式里所有的非0 值都被当成true. 这里的意思就是while 条件永远都成立,在if (k==num) break; 退出这个while 循环.


建议仔细看看C 语言

读书人网 >C++ Builder

热点推荐