约瑟夫环问题

/*约瑟夫环问题
起始 : 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值