LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1132|回复: 2

数据结构问题,请帮忙解释一下好吗?

[复制链接]
发表于 2003-2-25 18:02:25 | 显示全部楼层 |阅读模式
数据结构问题,请帮忙解释一下好吗?
#include <iostream.h>
#include <iomanip.h>
void main()
{
//建立小孩数组
const int num=10; //小孩数
int interval; //每次数interval个小孩,便让该小孩离开
int a[num]; //小孩数组

//给小孩编号
for(int i=0;i<num;i++) //小孩的编号只与小孩数有关
a=i+1;

//输入数小孩间隔
cout<<"lease input the interval:"; //输入一个数小孩个数
cin>>interval;

//将全体参加的小孩输出
for(int i=0;i<num;i++) //顺序输出开始时的小孩编号
cout<<a<<",";
cout<<endl;

int k=1; //标识处理第K个离开的小孩
int i=-1; //数组下标(下一个值0就是第一个小孩的下标)

//处理获胜前的小孩
while(1)
{
//在圈中数interval个小孩
for(int j=0;j<interval
{
i=(i+1)%num; //对下标加1求模
cout<<setw(4)<<i;
if(a!=0) //如果该元素的小孩在圈中,则承认数数有效
j++;
}

if(k==num)break; //该小孩是最后一个(胜利者)吗?

cout<<a<<","; //输出离开的小孩编号
a=0; //标识该小孩已离开
k++; //准备处理下一个圈中小孩
}
//break 语句跳转到此
cout<<"\n NO."<<a<<" boy's won. \n"; //输出胜利者
}
程序运行的结果我想不通,请指点一下。请帮我标出结果(每一轮数到的数以及最后的结果好吗)?非常谢谢!
发表于 2003-2-26 12:45:01 | 显示全部楼层
我把我计算的结果给你看一下:

[root@abcdefg test]# ./a.out
Please input the interval:2
1,2,3,4,5,6,7,8,9,10,
   0   12,   2   34,   4   56,   6   78,   8   910,   0   1   23,   3   4   5
67,   7   8   9   01,   1   2   3   4   5   6   7   89,   9   0   1   2   3   4
  5   6   7   8   9   0   1   2   3   4
NO.5 boy's won.
[root@abcdefg test]#
上面看起来比较乱,我作了一点点改动,其实应该是这样的:
[root@abcdefg test]# ./a.out
Please input the interval:2  /*输入间隔*/
1,2,3,4,5,6,7,8,9,10,       /*打印小孩的编号,对应数组为a[0]-a[9]
0|1|2,2|3|4,4|5|6,6|7|8,8|9|10,0|1|2|3,3|4|5|6|7,7|8|9|0|1,1|2|3|4|5|6|7|8|9,9|0
|1|2|3|4|5|6|7|8|9|0|1|2|3|4|   /*用“,”搁开一个for循环,|分隔for循环里检查过的i*/
NO.5 boy's won./*转了一圈后发现最后一个没有离开的是赢家*/


这样你能明白吗?每次通过for循环来离开一个,并且将它标为已离开a=0,然后再次进入for循环找下一个离开的小孩。
 楼主| 发表于 2003-3-2 10:06:14 | 显示全部楼层
谢谢,我明白了:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表