蓝桥杯 计数问题 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;
} 

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/106609972