上一篇博客中提到的是編程比賽的第一道題,還是比較容易的。第二道題就相對來說有些不容易想了。
題目要求(大概):
現有兩個按鈕,按下按鈕N會執行2x+1,按下M執行2x+2。x初值爲0,現要求出任意正整數n應使用何種按法使得x能變成n。
解法一:
我們猜想,是否任意給定一個數字都可以得通過按不同的按鈕得到。可以使用窮盡法試試,便可以發現其中的規律。其實是可以通過任意一個數字找出其的順序。那麼我們可以倒着想:
- 如果n爲偶數且n不等於0,則 按下了M ,執行 n = (n-2)/2;
- 如果n爲奇數,則按下了N ,執行 n = (n-1)/2;
- 如果n爲0,則逆序輸出按下的按鈕。
C語言實現:
#include <stdio.h>
int max(int a);
int min(int a);
int main(void){
int value;
scanf("%d",&value);
char ch[2000];
int flag = 0;
int k = 0;
while (value > 0){
if(value %2 == 0){
value = max(value);
ch[flag] = 'G';
flag++;
} else{
value = min(value);
ch[flag] = 'N';
flag++;
}
}
while (flag > 0){
printf("%c",ch[flag-1]);
flag--;
}
}
int max (int a){
int temp = (a-2)/2;
return temp;
}
int min (int a){
int temp = (a-1)/2;
return temp;
}