注册 登录
编程论坛 C++教室

一个习题看不懂 来个人帮我看看啊

honghong88 发布于 2011-11-15 19:56, 724 次点击
#include <iostream>
using namespace std;
int main()
 {int i,k,m,n,num[50],*p;
  cout<<"input number of person: n=";
  cin>>n;
  p=num;
  for (i=0;i<n;i++)
    *(p+i)=i+1;          // 以1至n为序给每个人编号
  i=0;                   // i为每次循环时计数变量
  k=0;                   // k为按1,2,3报数时的计数变量
  m=0;                   // m为退出人数
  while (m<n-1)          // 当退出人数比n-1少时(即未退出人数大于1时)执行循环体
  {if (*(p+i)!=0)  k++;
   if (k==3)             // 将退出的人的编号置为0
     {*(p+i)=0;
      k=0;
      m++;
     }
   i++;
   if (i==n) i=0;        // 报数到尾后,i恢复为0
   }
  while(*p==0) p++;
  cout<<"The last one is NO."<<*p<<endl;
  return 0;



}


红色这段 这个循环体有 可能m>=n-1的时候吗 我的想象在应该是  的 while (m<n-2)的时候 循环体才有 可能结束
3 回复
#2
jcw081201102011-11-16 16:29
这时一个出圈游戏  一群人分别给他们编号~ 1~n 一共n个人  要离开n-1个人 最后那个是胜利者~ 也就是意味着要做n-1次循环;而m初始为0;如果以m为循环判断条件;那么就是m从0~n-2 一共 循环 n-1次;
#3
心灵百合2011-11-17 17:46
可以while(m<=n-1)吧!当m=n-1时;还剩一个人
#4
honghong882011-11-17 17:53
我有一点疑问的是  当最后剩下2个人的时候 计数 器 k无法 再等于3  因此也无法 在退出一个人  我认为最近剩下的情况有可能是2个人呢 不知道这样想 对不对
1