牛客网题目——Nowcoder勇气获得机

这篇博客介绍了如何通过勇气获得机帮助妞妞达到NowcoderGirl女生编程挑战赛所需的勇气值。文章阐述了勇气获得机的两个按钮功能:N按钮使勇气值翻倍并加1,G按钮则翻倍并加2。通过分析输入数字的奇偶性,提出了一个按键方案,确保勇气值最终恰好等于给定的目标值。代码展示了如何根据输入的勇气值生成相应的按键序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

勇气获得机

妞妞听说Nowcoder Girl女生编程挑战赛要开始了, 但是她没有足够的勇气报名参加, 牛牛为了帮助妞妞,给她准备一台勇气获得机。初始的时候妞妞的勇气值是0, 勇气获得机有两个按钮:

1、N按钮: 如果当期拥有的勇气值为x, 按下之后勇气值将变为2*x+1,

2、G按钮: 如果当前拥有的勇气值为x, 按下之后勇气值将变为2*x+2,

勇气值过高也会膨胀,所以妞妞需要将自己的勇气值恰好变为n, 请你帮助她设计一个勇气获得机的按键方案使妞妞的勇气值恰好变为n。

输入描述:
输入包括一行, 包括一个正整数n(1 <= n <= 10^9), 表示妞妞最后需要的勇气值。
输出描述:
输出一行字符串, 每个字符表示该次妞妞选择按动的按钮,'N'表示该次按动N按钮,'G'表示该次按动G按钮。

示例1

输入

20

输出

NGNG

代码与思路

因为2乘以任意实数,得到的积都为偶数,故,N可以代表一个奇数,G可以代表一个偶数。具体算法,判断输入数字是奇数还是偶数,如果是奇数,那么用N分解它,得到一个N按钮。如果是偶数,那么用G分解它,得到一个G按钮。由于分解的步骤与获得的步骤是倒序的,我们可以把分解操作得到的按钮添加到前面及可。
在这里插入图片描述

#include<stdio.h>
#include<string>
using namespace std;
int main(){
    int n;
    while(~scanf("%d",&n)){
        string res="";
        while(n)
            if(n&1) n=(n-1)>>1,res="N"+res;
            else n=(n-2)>>1,res="G"+res;
        printf("%s\n",res.c_str());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值