2019年第十屆藍橋杯【C++省賽B組】【第六題: 特別數的和】——附解題思路及代碼

藍橋杯歷屆題目及解析彙總(附思路及代碼)【點擊此進入】


藍橋杯,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;
}

藍橋杯,ACM算法進階資料大放送

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章