1. 程式人生 > >牛客 勇氣獲得機 從後往前推理

牛客 勇氣獲得機 從後往前推理

連結:https://ac.nowcoder.com/acm/contest/315/B
來源:牛客網
 

題目描述

妞妞聽說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
#include<bits/stdc++.h>
using namespace std;
char maps[100000];
int n;
void dfs(int x,int t)
{
    if(x>n)return;
    if(x==n)
    {
        for(int i=0; i<t; i++)
        {
            cout<<maps[i];
        }
    }
    else
    {
        cout<<t<<endl;
        for(int i=1; i<=2; i++)
        {
            if(i==1)maps[t]='N';
            else maps[t]='G';
            dfs(2*x+i,++t);
        }
    }
}
int main()
{
    cin>>n;
    string s="";
    while(n>0){
        if(n%2==0){
            s="G"+s;
            n=(n-2)/2;
        }else{
            s="N"+s;
            n=(n-1)/2;
        }
    }
    cout<<s;
}