c语言编程 100人围圈问题
这个是系统给出的参考答案,可以正常运行,但是中间有一句无论如何都难以理解,希望高手帮助!感激不尽。“s1=(s1+m-1)%i;//求得每次出圈人的位置”这一句为什么可以...
这个是系统给出的参考答案,可以正常运行,但是中间有一句无论如何都难以理解,希望高手帮助!感激不尽。
“s1 = (s1+m-1)%i; //求得每次出圈人的位置” 这一句为什么可以求出“出圈人的位置”,我想的是第 10,20,30...的人会出圈,但是用这个语句算的是10,19,28,37...这一句到底该怎样理解?
下图是本题的题目
int i, j, s1, w;
s1 = s;
/*将1到n个人的序号存入一维数组p中*/
for (i=1; i<=n; i++) //循环变量i从1开始,依次递增到n
p[i-1] = i; //把i的值赋给数组元素p[i-1]
for (i=n; i>=2; i--)
{
s1 = (s1+m-1)%i; //求得每次出圈人的位置
if (s1 == 0) //如果s1等于0,则说明要开始报数的人是最后一个人
s1 = i; //把此时变量i的值赋给s1
w = p[s1-1]; //把每次出圈的人的序号赋给w
/*将第s1个至倒数第i个元素依次向前移动一个位置*/
for (j=s1; j<=i-1; j++)
p[j-1] = p[j];
p[i-1] = w; //把每次出圈的人的序号赋给倒数第i个位置上
} 展开
“s1 = (s1+m-1)%i; //求得每次出圈人的位置” 这一句为什么可以求出“出圈人的位置”,我想的是第 10,20,30...的人会出圈,但是用这个语句算的是10,19,28,37...这一句到底该怎样理解?
下图是本题的题目
int i, j, s1, w;
s1 = s;
/*将1到n个人的序号存入一维数组p中*/
for (i=1; i<=n; i++) //循环变量i从1开始,依次递增到n
p[i-1] = i; //把i的值赋给数组元素p[i-1]
for (i=n; i>=2; i--)
{
s1 = (s1+m-1)%i; //求得每次出圈人的位置
if (s1 == 0) //如果s1等于0,则说明要开始报数的人是最后一个人
s1 = i; //把此时变量i的值赋给s1
w = p[s1-1]; //把每次出圈的人的序号赋给w
/*将第s1个至倒数第i个元素依次向前移动一个位置*/
for (j=s1; j<=i-1; j++)
p[j-1] = p[j];
p[i-1] = w; //把每次出圈的人的序号赋给倒数第i个位置上
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询