小韦老师@NOIP 普及组-2010-数字统计

小韦老师@NOIP 普及组-2010-数字统计

题目:

描述

请统计某个给定范围 [L, R] 的所有整数中,数字 2 出现的次数。

比如给定范围 [2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 20 中出现 1 次,在数 21 中出现 1 次,在数 22 中出现 2 次,所以数字 2 在该范围内一共出现了 6 次。

输入

输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开。

输出

输出共 1 行,表示数字 2 出现的次数。

输入样例1

2 22

输出样例1

6

输入样例2

2 100

输出样例2

20

题解:

思路:
整体思路:

枚举 L~R,将每个整数含有的 2 的数量加起来,即为所求。

具体步骤:

1.定义两个变量 l 和 r,用来表示 L 和 R,即闭区间的左端点和右端点。并输入 l 和 r。
2.定义一个计数器:

	int cnt = 0;  // 计数器,用来记录 2 总共出现的次数 

3.枚举 l~r,将用自定义函数用来求当前数包含 2 的数量,并将这个数量累加到累加器中。

	for (int i = l; i <= r; i++) {  // 枚举闭区间 [l, r] 的每一个整数 
		cnt += count(i);  // 将当前数包含的 2 的个数累加到累加器中 
	}

4.输出累加器:

	cout << cnt;  // 输出计数器 

5.自定义函数 count 的实现:

	// 用来数 x 含有几个 2,返回 2 的个数 
	int count(int x) {  
		int cnt = 0;  // 计数器,用来记录 x 含有的 2 的个数 
		while (x != 0) {  // 当 x 部位 0 时 
			if (x % 10 == 2) cnt++;  // 若当前 x 的最右边一位是 2,则计数器加 1 
			x /= 10;  // x 将刚刚处理过的最右边一位去掉 
		}
		return cnt;  // 返回计数器 
	}
完整代码:
#include <bits/stdc++.h>

using namespace std;

// 用来数 x 含有几个 2,返回 2 的个数 
int count(int x) {  
	int cnt = 0;  // 计数器,用来记录 x 含有的 2 的个数 
	while (x != 0) {  // 当 x 部位 0 时 
		if (x % 10 == 2) cnt++;  // 若当前 x 的最右边一位是 2,则计数器加 1 
		x /= 10;  // x 将刚刚处理过的最右边一位去掉 
	}
	return cnt;  // 返回计数器 
}

int main() {

	int l, r;  // 闭区间的左端点和右端点 
	cin >> l >> r;  
	int cnt = 0;  // 计数器,用来记录 2 总共出现的次数 
	for (int i = l; i <= r; i++) {  // 枚举闭区间 [l, r] 的每一个整数 
		cnt += count(i);  // 将当前数包含的 2 的个数累加到累加器中 
	}
	cout << cnt;  // 输出计数器 
	
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值