藍橋杯歷屆題目及解析彙總(附思路及代碼)【點擊此進入】
藍橋杯,ACM算法學習【文檔】【視頻】大放送【點擊此進入】
第六題
標題:特別數的和(時間限制: 1.0s 內存限制: 256.0MB 本題總分:15 分)###
【問題描述】
小明對數位中含有 2、0、1、9 的數字很感興趣(不包括前導 0) ,在 1 到
40 中這樣的數包括 1、2、9、10 至 32、39 和 40,共 28 個,他們的和是 574。
請問,在 1 到 n 中,所有這樣的數的和是多少?
【輸入格式】
輸入一行包含兩個整數 n。
【輸出格式】
輸出一行,包含一個整數,表示滿足條件的數的和。
【樣例輸入】
40
【樣例輸出】
574
【評測用例規模與約定】
對於 20% 的評測用例,1 ≤ n ≤ 10。
對於 50% 的評測用例,1 ≤ n ≤ 100。
對於 80% 的評測用例,1 ≤ n ≤ 1000。
對於所有評測用例,1 ≤ n ≤ 10000。
解題思路:
這題主要是找出在一定範圍內數位中出現 2、0、1、9 這四個數字之一的所有數字,感覺這個有規律,懶得找了,直接暴力,最大範圍爲 10000, O(n) 複雜度應該能過
代碼:
#include <iostream>
using namespace std;
// 判斷某個數字位中是否包含 2, 0, 1, 9 這四個數字
bool judge(int n) {
int t;
while (n) {
if (((t = n % 10) == 2) || t == 0 || t == 1 || t == 9) {
return true;
}
n /= 10;
}
return false;
}
int main() {
int n, res = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
if (judge(i)) {
res += i;
}
}
cout << res << endl;
return 0;
}