设有n个人围坐一圈并按顺时针方向从l到n编号,从第s个人开始进行l到m的报数,报数到第m个人,此人出

14 查阅

设有n个人围坐一圈并按顺时针方向从l到n编号,从第s个人开始进行l到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始l到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每l0人一组,给出这n个人的顺序表。请考生编写函数Josegh(void)实现此功能,并调用函数writeDat,把结果P输出到文件out.dat中。 设n=100,s=1,m=10。 ①将l到n个人的序号存入一维数组P中; ②若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置; ⑨重复第②步直至圈中只剩下p[1]为止。 注意:部分源程序已经给出。 请勿改动主函数main和输出数据函数writeDAT的内容。

参考答案:

【审题关键句】围圈问题。 【解题思路】 ①定义整型变量i、j,表示出圈人位置的变量sl和出圈人序号的变量w。并将S的值赋给变量sl(s的值已在源程序中赋值为1)。 ②通过一个for循环,将n个人的序号存入一维数组P中(n的值已在源程序中赋值为100)。 ③再建立一个for循环,循环变量i从n开始,即从100开始,依次递减直到其值小于2时退出循环。由于每执行一次循环,人数就会减少1个,因此,此处的for循环应表示为递减方式。在该循环体中,先计算每次出圈人的位置,通过表达式“(sl+m-1)%i”计算每次出圈

计算机三级