举报
以下是引用Eastsun在2006-5-31 22:26:00的 @解法二,时间复杂度为O(n) @Author :Eastsun @Version :1.0 @Date :06.5.31 */ int solve(int n,int m){ int result,num; for(num =1;num<=n;num++) result=(result+m)%num; return result; } void main(){ printf("%d",solve(100,99)); getchar(); }[/code]
以下是引用lufeng369在2006-6-17 10:59:00的发言:[BR] 这段程序用来解约瑟夫环问题是错的。。第一result变量没有赋初值。。第二。。这段算法不知所云。。结果是错的。。
以下是引用lufeng369在2006-6-17 11:48:00的发言:[BR]<FONT size=2>约瑟夫环问题: N个人,围成一圈,从某一个人开始,沿一个方向每隔M个人,就踢出去一个人,最后剩下的那个人为胜利者。 不知道大家说的“约瑟夫”问题是不是就是这个“约瑟夫环”的问题。。? 如果是的话solve(100,99)的正确答案应该是21才对。。 用C解这个问题比较麻烦。。 用python解就很简单。。 def solve(num,intval): #自动身成列表,从0开始 到num-1 people=range(num) del_people=intval while(len(people) > 1): del people[del_people] del_people = (del_people + intval) % len(people) return people[0] print "the victor is %d"%solve(100,99) 复制代码
本版积分规则 发表回复 回帖后跳转到最后一页
Archiver|手机版|小黑屋|EMAX Studio
GMT+8, 2025-8-24 11:31 , Processed in 0.012168 second(s), 17 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.