考试网 >> IT认证 >> 等级 >> 三级考试 >> 计算机等级考试三级网络复习资料总录

计算机等级考试三级网络复习资料总录

发布时间:2006-07-25 12:12     点击:
分页:上一页  1 [2] 3  下一页

(2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;

(3)重复第(2)步直至圈中只剩下p[1]为止。

难点就在这后面两步,首先可以看出是要做一个循环,而且循环的条件是递减

马上可以先写出一个循环递减的框架

for(i=n;n>1;n--){}

接下来就是该怎么写循环体的内容了:我们可以发现,题目的算法过程2描述的很清楚,具体如下:

s=(s+m-1)%i;首先,求出出圈人的位置,这里用一个求余是为了实现圈循环(也就是将队列头尾相连),这里i是圈中剩余的人数(除去出圈后的人)。 当然,我们稍微注意一下,那就是没有第0位的出圈人存在,所以这里如果s=0是不对的,

其实这种情况是出圈人是队尾的那一个人,所以这里加上一个判断:

if(s==0)s=i;

好了,我们取到了出圈人的位置了,那我们就要:

"则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置"

实现这一句的算法过程的代码,可以看出也是一个循环:

w=p[s-1]; 首先,把出圈人的号码暂时放起来(因为此时倒数第i个位置还有人占据,不能替换掉)

接着我们要把倒数第i个位置腾空出来,

而这个算法的实现就是“第i+1个至倒数第i个元素依次向前移动一个位置”

明白了这句话的意思后,马上可以写出下面的一个循环代码来实现

for(j=s;j<i;j++)p[j-1]=p[j];出圈人的位置让给他的下一位,依次类推,最后腾出倒数第i个位置给出圈人。

最后出圈人占据倒数第i个位置:p[i-1]=w;(注意这里第i个位置在数组中下标是i-1,因为数组下标是0开始的,

到这里为止,循环体也写完了,整合起来,就可以得到下面的完整函数代码了:

void Josegh(void)

{

int i,j,w; 定义一些用于暂时存放出圈人和循环变量。

for(i=1;i<=n;i++) 开始初始化循环赋值。

p[i-1]=i;

for(i=n;i>=2;i--) 循环体开始

{s=(s+m-1)%i; 寻找出圈人

if(s==0)

s=i;

w=p[s-1]; 暂时安置出圈人
分页:上一页  1 [2] 3  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有