QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码
查看: 508|回复: 4

[已解决]第18讲的有个语句不是很明白

[复制链接]
最佳答案
0 
累计签到:2 天
连续签到:2 天
发表于 2017-6-27 09:29:44 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
看了18讲的约瑟夫问题,有个m%=n语句不是很明白,当时小甲鱼只是说在此处是等于2,他的具体含义是什么呀
最佳答案
2017-7-24 09:24:16
楼主你好,昨天我刚刚看了那个视频,我也发现了这个问题。
int n = 41;
int m = 3;
m %= n;
在小甲鱼讲解的时候,说的是 m %= n 得到的结果是2.
但是事实上不是这样的  m %= n 得到的结果是3.而根据小甲鱼的思路,用3来获取到3之前的一个结点 就是2的那个结点,再删除后面一个结点(就相当于报数为3的就自杀),然后2结点的指针指向3的后面一个结点,一直循环,就会身下16和31.

代码中的 m %= n 是取余的意思,就相当于 m = m%n;
其它这样的运算也是一样的,比如说 m += n,就相当于 m = m+n;
这样写可以让代码更简洁。
但是小甲鱼视频中的那行代码我觉得有误,m %= n 得到的结果是3 ,而小甲鱼说成了2 ,所以可以直接去掉那行代码就行了。
然后像这种约瑟夫问题,就是根据m的号码free一个结点,你把m换成4,那么去掉的就是报数为4的人,这只是一个推广。小甲鱼的代码思路是对的。
希望对你有帮组。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
30 
累计签到:450 天
连续签到:1 天
发表于 2017-7-4 10:08:57 | 显示全部楼层
本帖最后由 zlj19931010 于 2017-7-4 10:11 编辑

想帮你,但是我真的是懒得回去翻视频了,你能多点代码吗

m %= n; ==》 m = m%n; 求余数的,数组中用到%就是有一种把数组围成一个圈的意思
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
0 
累计签到:4 天
连续签到:1 天
发表于 2017-7-15 07:47:02 | 显示全部楼层
个人经过调试发现  这个代码甚至可以不写   程序结果依旧正确    理论上应该是 m  % n  ==3

3-1 = 2   所以那个地方循环2次   指到第三个结点   实现 人为到第三个结点的功能
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
1 
累计签到:3 天
连续签到:3 天
发表于 2017-7-24 09:24:16 | 显示全部楼层    本楼为最佳答案   
楼主你好,昨天我刚刚看了那个视频,我也发现了这个问题。
int n = 41;
int m = 3;
m %= n;
在小甲鱼讲解的时候,说的是 m %= n 得到的结果是2.
但是事实上不是这样的  m %= n 得到的结果是3.而根据小甲鱼的思路,用3来获取到3之前的一个结点 就是2的那个结点,再删除后面一个结点(就相当于报数为3的就自杀),然后2结点的指针指向3的后面一个结点,一直循环,就会身下16和31.

代码中的 m %= n 是取余的意思,就相当于 m = m%n;
其它这样的运算也是一样的,比如说 m += n,就相当于 m = m+n;
这样写可以让代码更简洁。
但是小甲鱼视频中的那行代码我觉得有误,m %= n 得到的结果是3 ,而小甲鱼说成了2 ,所以可以直接去掉那行代码就行了。
然后像这种约瑟夫问题,就是根据m的号码free一个结点,你把m换成4,那么去掉的就是报数为4的人,这只是一个推广。小甲鱼的代码思路是对的。
希望对你有帮组。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
0 
累计签到:10 天
连续签到:1 天
发表于 2017-10-20 22:30:08 | 显示全部楼层
假设n个人,但是要数字是>n的,比如10个人,数到13就死掉,要是程序也一个一个数过来无疑会增加时间复杂度,所以 m = m % n;后直接去除圈数,得到余数就是从头开始数的数字,这是有人跟我这么说的,希望能够帮助你理解
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /3 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2017-11-19 07:01

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