首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-03-09 
请解释一下代码josephus问题intmain(intargc,char*argv[]){constintnum10intintervalinta[num]for(int

请解释一下代码 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 语言

热点排行