约瑟夫环问题

来源:互联网 发布:vb object转换 编辑:程序博客网 时间:2024/06/06 06:51
/*约瑟夫环问题起始 : 0 1 2 3 ......  n-1 (头尾连接的环)从这n个数字中 删除第m个 。解析:第一次删除第m个:0 1 2 ...m-2 m ....n-1 (一共n个元素)那么由于环的性质,重新排列头尾====>            m m+1 m+2 ... n-1       0       1 2 ...x'  m-2  (n-1个元素) 对应序号 =>    0   1       2          n-1-m  n-m        ..x    n-1 应用动态归纳法: x为n-1个元素中的胜利者的序号,那么x'为n个元素中的胜利者 当x <= n-m-1 时 , x'=x+m ; 当x >n-m-1时, x'=x+m-n; 综合以上2个 就是 x'=(x+m)%n 由此可知 : f(n)= (f(n-1)+m )%n 又 f(1)=0; 可以得到以下代码:*/#include<stdio.h>void main(){int  a ,b,i,s=0;scanf("%d %d",&a,&b);for(i=2;i<=a;i++) // i为元素的个数{s=(s+b)%i;}printf("%d",s+1);}


0 0