最后N为什么会知道盗墓笔记电影最后结局是假的 求解

30927人阅读
解题笔记(46)
&& & & &约瑟夫环问题的原来描述为,设有编号为1,2,……,n的n(n&0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。&&稍微简化一下。&& & & &问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。&&& & & &思路:容易想到的就是用环链表来做,构建一个环链表,每个结点的编号为0, 1, ...... n-1。每次从当前位置向前移动m-1步,然后删除这个结点。最后剩下的结点就是胜利者。给出两种方法实现,一种是自定义链表操作,另一种用是STL库的单链表。不难发现,用STL库可以提高编写速度。struct ListNode
ListNode * //下一个
ListNode(int n = 0, ListNode *p = NULL)
{ num = next =}
//自定义链表实现
int JosephusProblem_Solution1(int n, int m)
if(n & 1 || m & 1)
return -1;
ListNode *pHead = new ListNode(); //头结点
ListNode *pCurrentNode = pH
//当前结点
ListNode *pLastNode = NULL;
//前一个结点
//构造环链表
for(i = 1; i & i++)
pCurrentNode-&next = new ListNode(i);
pCurrentNode = pCurrentNode-&
pCurrentNode-&next = pH
//循环遍历
pLastNode = pCurrentN
pCurrentNode = pH
while(pCurrentNode-&next != pCurrentNode)
//前进m - 1步
for(i = 0; i & m-1; i++)
pLastNode = pCurrentN
pCurrentNode = pCurrentNode-&
//删除报到m - 1的数
pLastNode-&next = pCurrentNode-&
delete pCurrentN
pCurrentNode = pLastNode-&
//释放空间
int result = pCurrentNode-&
delete pCurrentN
}//使用标准库
int JosephusProblem_Solution2(int n, int m)
if(n & 1 || m & 1)
return -1;
list&int& listI
//初始化链表
for(i = 0; i & i++)
listInt.push_back(i);
list&int&::iterator iterCurrent = listInt.begin();
while(listInt.size() & 1)
//前进m - 1步
for(i = 0; i & m-1; i++)
if(++iterCurrent == listInt.end())
iterCurrent = listInt.begin();
//临时保存删除的结点
list&int&::iterator iterDel = iterC
if(++iterCurrent == listInt.end())
iterCurrent = listInt.begin();
//删除结点
listInt.erase(iterDel);
return *iterC
&& & & 上述方法的效率很低,其时间复杂度为O(mn)。当n和m很大时,很难在短时间内得出结果。不过好处就是可以给出n个人出圈的次序。只要在删除前保存一下即可。&& & & 下面利用数学推导,如果能得出一个通式,就可以利用递归、循环等手段解决。下面给出推导的过程:&& & & &(1)第一个被删除的数为 (m - 1) % n。&& & & &(2)假设第二轮的开始数字为k,那么这n - 1个数构成的约瑟夫环为k, k + 1, k + 2, k +3, .....,k - 3, k - 2。做一个简单的映射。&& & & & & & k & & & & -----& &0&&& & & & & & k+1 & &------& 1&&& & & & & & k+2 & &------& 2&&& & & & & & & ...&&& & & & & & & ...&&& & & & & & k-2& & ------& &n-2&&& & & &这是一个n -1个人的问题,如果能从n - 1个人问题的解推出 n 个人问题的解,从而得到一个递推公式,那么问题就解决了。假如我们已经知道了n -1个人时,最后胜利者的编号为x,利用映射关系逆推,就可以得出n个人时,胜利者的编号为 (x + k) % n。其中k等于m % n。代入(x + k) % n &&=& &(x + (m % n))%n &=& (x%n + (m%n)%n)%n &=& (x%n+m%n)%n &=& (x+m)%n&& & & &(3)第二个被删除的数为(m - 1) % (n - 1)。&& & & &(4)假设第三轮的开始数字为o,那么这n - 2个数构成的约瑟夫环为o, o + 1, o + 2,......o - 3, o - 2.。继续做映射。&& & & & & & o & & & & -----& &0&&& & & & & & o+1 & &------& 1&&& & & & & & o+2 & &------& 2&&& & & & & & & ...&&& & & & & & & ...&&& & & & & & o-2 & & ------& &n-3&&& & & & 这是一个n - 2个人的问题。假设最后的胜利者为y,那么n -1个人时,胜利者为 (y + o) % (n -1 ),其中o等于m % (n -1 )。代入可得 (y+m) % (n-1)&& & & & 要得到n - 1个人问题的解,只需得到n - 2个人问题的解,倒推下去。只有一个人时,胜利者就是编号0。下面给出递推式:&& & & & &f [1] = 0;&&& & & & &f [ i ] = ( f [i -1] + m) % (i&1)&&& & & &有了递推公式,实现就非常简单了,给出循环的两种实现方式。再次表明用标准库的便捷性。int JosephusProblem_Solution3(int n, int m)
if(n & 1 || m & 1)
return -1;
int *f = new int[n+1];
f[0] = f[1] = 0;
//f[0]其实用不到的
for(unsigned i = 2; i &= i++)
f[i] = (f[i-1] + m) % //按递推公式进行计算
int result = f[n];
delete []f;
}int JosephusProblem_Solution4(int n, int m)
if(n & 1 || m & 1)
return -1;
vector&int& f(n+1,0);
for(unsigned i = 2; i &= i++)
f[i] = (f[i-1] + m) %
return f[n];
}&& & & &&本人享有博客文章的版权,转载请标明出处&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:799855次
积分:8325
积分:8325
排名:第1822名
原创:87篇
评论:551条
文章:39篇
阅读:249015
文章:16篇
阅读:388413
(3)(3)(52)(34)(2)人人网 - 抱歉
哦,抱歉,好像看不到了
现在你可以:
看看其它好友写了什么
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&学渣必看:学霸做笔记的N个好办法 - 录取啦|高中升学资讯及交流平台
暂时查看别的地区
修改所在地区
下次不再显示
查看全部搜索结果
使用社交账号登录
还没有账户?马上注册
使用社交账号登录
已有账户?登录
使用社交账号登录
已有账户?登录
即将跳转至海风学习中心
即将跳转至海风学习中心
学渣必看:学霸做笔记的N个好办法
近日,高考结束,高三生解放了,高三学霸们的笔记也变成了火热的商品。学霸是不可复制的,想要自己做学霸,那就先来学一下学霸们是怎样做笔记的吧!N个学霸分享的做笔记好办法,分享给大家!方法一:用活页笔记本,课后整理分类郑璐璐:南开中学 理科718分“我个人觉得,笔记是经验的积累。”郑璐璐说。她认为,做笔记能够让知识点更加系统,小的易错点也更加清晰明了,整个知识网络更完善,能高屋建瓴的认识新的题目。整个高中学习,郑璐璐共用了8本笔记本。在同学之中,可能自己的笔记做得不是最详细的,但她更善于归纳和分类,而做好笔记的关键也是分类和善于归纳总结。高一开始,一个学科配一本笔记本,主要记知识点。后来又准备了两个大且厚的课题本,一本用于记数学难题、错题,一本用来整理归纳其他理科中容易忽视的小知识点,用于考试前看。用的是活页笔记本,方便取下或增加纸张,也便于分类。举例:比如数学,她会先将数学分成解析几何、数列和函数等几大重要板块,分别记在笔记本的前面、中间或靠后位置。同时,她也会将数列分为等差数列、等比数列以及数列放缩技巧等部分。而每一板块,她都会根据自己的理解,去整理老师讲的题和历年高考题。方法掌握要点:善于将笔记分类、善于整理和总结归纳笔记、善于分辨重点与非重点。方法二:给每张纸留白,课后再归纳填满刘俞君:南开中学 文科686分刘俞君的大小笔记本加一起共用了十多本。她做笔记,主要记老师上课的知识点,顺着写正面,再倒过来写反面。正面记例题,反面记错题和老师语录。此外,按照老师要求,每上一节新课做笔记时,她会在每张纸上留出三分之一的空白。等到复习或考试后,再写上自己归纳总结的相关内容。同时,她还强调语文笔记重要,尤其是对字音、字形的归纳,如果没有整理,翻书会费时间。还有作文素材,如果当时不记下,以后可能就忘了。方法掌握要点:认真记笔记,善于在课后归纳总结,更要善于举一反三。方法三:善用不同色彩,让重点一目了然夏清荃:巴蜀中学 理科679分谢璐阳:重庆一中 理科710分理科生夏清荃偏好同一科目使用不同色彩的笔记本:课堂重点、复习总结以及错题集,都会用不同颜色的本子和不同颜色的签字笔记录。这些色彩是为了迅速掌握重点,提高学习效率。他用不同颜色的笔代表不同程度的重要性,比如基础知识用黑色,而醒目的红色,则最适合用来标示重点。谢璐阳的笔记字迹工整、归纳完整,各种要点图文并茂,并用不同颜色加以标注。看到不同颜色的字体,会让心情更加愉悦,也会激起学习的兴趣。不过,两位学霸均表示,在一个笔记本上不宜用过多颜色,颜色过多会让人分不清重点。方法掌握要点:不同颜色可以让笔记易于区分重点,也可以让因为学习而烦闷的心情变好,这不仅是记笔记的好方法,更是调节心态的小窍门。小鹿温馨提示:学霸记笔记方法可借鉴,但笔记不能照抄。学习应有自己的探究与个性,笔记只有亲自记录,才能有清楚的思路。那么在学习中,做笔记对学习成绩是非常有帮助的。好记性不如烂笔头,记笔记不仅让同学们对知识点和记录的内容加深了印象,利于背诵,笔记上的归纳总结和分类更是考验了同学们对知识点的吸收程度,以及体现自我思考、自主学习的过程。学霸笔记有一定的借鉴意义,其中记录了很多值得参考的学习经验和学习心得。但是,笔记是一种个性化的整理,并不适用于每一个人,不能盲目依赖。每个学生的学习程度不同,如果机械地照搬“学霸笔记”,容易丧失自我的归纳概括能力。因此,小鹿希望大家学习方法,而不是照搬方法。找到适合自己的方法才是最重要的,而能否通过记笔记强化知识的吸收、提高自主学习和自我思考的能力也是提升成绩的必经途径。推荐阅读:
15:00:41.0
你可能也喜欢:
15:00:41.0
你可能也喜欢
留下您的联系方式方便我们后续跟进或给您寄送礼物(选填)
文章关注者怎么证明y=(ax+n)/(bx+m)的y不等于a/b忘了加条件
- - x不等于-m/b不过这个不是本来题目隐含条件吗
分母不为0啊对对对
还有 a 不等于 b m n 也不相等
应该是这样吧
老师上课讲了
可是我笔记只写了这些 现在复习就看不懂了- -
伱我之間001DC
可以等于比如a=b=m=n此时y=1,就是等于应该加上bn≠am假设等于(ax+n)/(bx+m)=a/bb(ax+n)=a(bx+m)abx+bn=abx+ambn=am和bn≠am矛盾所以不能等于
为您推荐:
用假设法啊,直接用a/b=(ax+n)/(bx+m)计算,不过应该有个前提吧,你的题目没给清楚哦
因为a≠b m≠n x≠-m/b直接用a/b=(ax+n)/(bx+m)计算就可以了.你貌似没给全吧.听的迷迷糊糊的
扫描下载二维码

我要回帖

更多关于 死亡笔记2最后的名字 的文章

 

随机推荐