7-69 求婚

7-69 求婚

国王的女儿达西娅要出嫁了,按照当地的风俗,在结婚那天公主从高台上抛下一朵鲜花,花儿落到谁身上,公主就嫁给谁。达西娅担心花儿落不到心上人克俊身上,就和克俊一起商议……。

达西娅找到父亲说:“我不愿意搭台抛花,那么多人挤在一起乱哄哄的。”国王说:“不搭台也行,你必须在结婚当天从求婚人群中选出新郎,但不许指名。”达西娅高兴地找到司仪做了安排。

结婚那天,司仪让求婚者站成一排,克俊数了一下求婚的人数,然后就站到队伍中去了。司仪让求婚者从 1 开始报数,报单数的人退场,留下的人再从 1 开始报数,报单数的人再退场,……,到最后只剩一个人时,众人惊奇地看到这个人正是克俊。

请编写程序,输入求婚的人数 n,输出克俊应该站的位置 p。

输入格式

n

输出格式

p

输入样例
105
输出样例
64
#include <stdio.h>
#include <math.h>


int main() {

    long long n, p = 0;
    scanf("%lld", &n);
    while (pow(2, p) <= n) {
        p++;
    }
    printf("%.0lf\n",pow(2, p-1));

    return 0;
}

思路

- 这是一道约瑟夫环问题,但可以使用一个巧方法去计算出答案
- 单数的退场说明这个人一定报偶数,只有2的n次方才会一直报偶数
- 所以找出最大的2的n次方就行
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Likf(❁´◡`❁)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值