约瑟夫环

百度搜索约瑟夫问题

递推式是:
J(2k)=2J(k)-1
J(2k+1)=2J(k)+1

但是其实最优雅的方法就是用位数
我们可以对n本身做一次向左的循环移位来得到J(n)

例如:j(6)=j(110)=101=5

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int n;
    scanf("%d",&n);
    int num[16],k;
    int *p=NULL;
    int i=0;
    while(n)
    {
        num[i]=n%2;
        i++;
        n=n/2;
    }
    p=(int *)malloc(i*sizeof(int));
    for(k=0;k<i;k++)
    {
        p[k]=num[i-k-1];
    }
    int tm=p[0];
    for(k=1;k<i;k++)
    {
        p[k-1]=p[k];
    }
    p[i-1]=p[0];
    int sum=0;
    for(k=0;k<i;k++)
    {
        sum=sum*2+p[k];
    }
    printf("%d",sum);
    free(p);
    return 0;
}




全部评论

相关推荐

07-15 18:09
门头沟学院 Java
点赞 评论 收藏
分享
07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-11 13:34
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
最近拿到了正浩的提前批offer感觉自己的实力得到了肯定,也给了我更多底气
搞机墨镜猫:正浩提前批官网好像就只有电力电子软硬件,哥们投的是这两个岗位吗
26届校招投递进展
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务