| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 370 人关注过本帖
标题:约瑟夫环问题,希望哪位高手能给我解惑~
只看楼主 加入收藏
zhuyu99
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-3-6
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
约瑟夫环问题,希望哪位高手能给我解惑~
#include<stdio.h>
#define ALL 15
int main()
{
 int count = ALL; //count表示当前圈内剩下的人数  
 int num=0; //num表示当前报的数字
 int i,j; //i表示当前报数的人对应的下标  
 int left;  //left 表示最后剩的那个人对应的编号
 int a[ALL] = {0};
 for(i=0; i<ALL; i++)  
 a[i] = i+1; //a[i]保存第i个人的编号  
 i = 0; //从下标为0的人开始报数  

 while(count>1) //如果剩余人数大于1则循环  
 {  
   
 num++;  
 if(num == 3) //报数到m的人离开  
 {  
 for(j=i; j<count-1; j++)  //将下标为i的元素删除并把后一位编号前移
 a[j] = a[j+1];  
 count--; //当前剩余人数减1  
 num = 0; //下一个人重新从1开始报数  
 i-=1;  
 }
 i=(i+1)%count; //计算下一个要报数的人的下标  
 }  
left = a[0]; //最后只剩下一个人,将其编号赋值给remain

printf("出卖耶稣的叛徒是NO:%d\n",left);

 return 0;
}
代码如上
我想知道, i=(i+1)%count; 这句环状处理到底有什么作用,为什么不能直接写成i=i+1呢,我试过,改后就不对了,求解释!
搜索更多相关主题的帖子: include 约瑟夫 count 
2015-03-06 18:20
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:20 
是不是改成以下语句你就可以理解?
i++;
if(i>=count)i=0;

其实i=(i+1)%count可等效上述语句。

能编个毛线衣吗?
2015-03-06 18:57
zhuyu99
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-3-6
收藏
得分:0 
回复 楼主 zhuyu99
恩恩,谢谢你,我理解了
2015-03-07 18:18
快速回复:约瑟夫环问题,希望哪位高手能给我解惑~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014588 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved