首先是比较容易看得懂的。。
原题:
用户输入M,N值,N个人围成一个环,从0号人开始每隔M个人踢人,直到最后一个人
求最后一个剩下的人是几号?
(约瑟夫环问题 Josephus)
//踢第M+1个人
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(100000,98)
#然后是非常优美的算法
踢第m个人。。
/**
@解法二,时间复杂度为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();
}








