简单版的约瑟夫环问题编程:清除隔壁编号的

根据查找的只是发现约瑟夫环是有规律的;清除隔壁编号的

人的总数:1——2——3——4——5——6——7——(对应下面的存活位置)

存活位置:1——1——3——1——3——5——7——

一号清除号,三号清除四号.....一圈后会发现,偶数位置的都被清除了。剩下的继续 ....

得到公式:X(总人数)=2^n+a;

                 Y(存活位置)=2a+1;

其中未知的就是n和a。需要求出来!(写的很简单)

#include <iostream>
using  namespace std;
void f(unsigned int x )
{    int a;
     int zan=2;//工具人 
     if(x>=4){
     for(int i=1;i<=100;i++)
     {
        zan=zan*2;
         if(zan>x)
        {
        break;};}
    a=x-(zan/2);
    int y;
    y=2*a+1;
    cout<<y;
}}

int main()
{   unsigned int x;
    cin>>x;
    while(0<x&&x<3)
     {cout<<1;
     break;
     }
    while(x==3)
     {
      cout<<3;
       break; 
     }
    f(x);
    return main();    
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值