1. 程式人生 > 其它 >牛客網題目——Nowcoder勇氣獲得機

牛客網題目——Nowcoder勇氣獲得機

技術標籤:c++資料結構字串演算法java

勇氣獲得機

妞妞聽說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()); } }