藍橋杯 計數問題 C++算法提高 HERODING的藍橋杯之路

資源限制
時間限制:1.0s 內存限制:128.0MB
問題描述
  試計算在區間 1 到 n 的所有整數中,數字 x(0 ≤ x ≤ 9)共出現了多少次?例如,在 1到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,數字 1 出現了 4 次。
輸入格式
  輸入文件名爲 count.in。
  輸入共 1 行,包含 2 個整數 n、x,之間用一個空格隔開。
輸出格式
  輸出文件名爲 count.out。
  輸出共 1 行,包含一個整數,表示 x 出現的次數。
輸入輸出樣例
count.in
count.out
11 1
4
數據說明
  對於 100%的數據,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。

解題思路:
該題要求用文件輸入,文件輸出,爲了方便就沒有做了,因爲提交的結果直接輸入輸出也是滿足條件的,這道題麻煩在於如何統計個數,我的方法是創建一個數組,有容量爲10,分別表示0——9這十個數的數量,把輸入的數字轉換成字符串,一位一位地比較,如果有目的的數字,則加一,這裏的加一用ASCII碼實現,方便快捷,當然還要注意超時問題,爲了解決這個問題,我寫了一個函數,這樣輸入一個數字就判斷一下的方式不會超時。代碼如下:

#include<bits/stdc++.h>

using namespace std;

int a[10];

void getNum(int number){
	string s;
	stringstream stream;
	string temp;
	stream << number;
	stream >> temp; 
	s.append(temp);
	char * c = (char*)s.c_str();
	for (int j = 0; j < strlen(c); j ++){
		a[c[j] - '0'] ++;
	}
}

int main() {
	int num, n;
	cin  >> num >> n;
	for (int i = 1; i <= num; i ++){
		getNum(i);
	} 		
	cout << a[n];
	return 0;
} 

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