Vijos1130. 數的計數
來源:程序員人生 發布時間:2014-10-02 08:00:00 閱讀次數:3219次
試題請參見: https://vijos.org/p/1130
題目概述
我們要求找出具有下列性質數的個數(包含輸入的自然數n):
先輸入一個自然數n(n≤1000),然后對此自然數按照如下方法進行處理
1. 不作任何處理;
2. 在它的左邊加上一個自然數,但該自然數不能超過原數的一半;
3. 加上數后,繼續按此規則進行處理,直到不能再立生自然數為止.
輸入
一個自然數n.
輸出
一個整數, 總的個數.
解題思路
我不得不說, 這題意敘述得實在是...非常棒! 舉個栗子說: 若n = 6, 則會有如下再生數:
6, 16, 26, 126, 36, 136
提取當前這個數的最高位x, 這個數可能產生的再生數的個數為x / 2.
將最終結果加上x / 2即可.
遇到的問題
一道AC率為83%的題貌似不會遇到什么問題 0 0
源代碼
#include <iostream>
void getNumbers(int n, int& counter) {
counter += n / 2;
for ( int i = 1; i <= n / 2; ++ i ) {
getNumbers(i, counter);
}
}
int main() {
int n = 0, counter = 1;
std::cin >> n;
getNumbers(n, counter);
std::cout << counter << std::endl;
return 0;
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈