P1980 [NOIP2013 普及组] 计数问题

文章描述了一个编程问题,要求计算在1到n的整数范围内,数字x出现的次数。解决方案涉及到使用‘数位分离’的方法,通过循环遍历每个数并检查其数位来统计x的出现频率。提供的C++代码示例展示了如何实现这一过程。

题目描述

试计算在区间 111nnn 的所有整数中,数字 xxx0≤x≤90\le x\le90x9)共出现了多少次?例如,在 111111111 中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,数字 111 出现了 444 次。

输入格式

222 个整数 n,xn,xn,x,之间用一个空格隔开。

输出格式

111 个整数,表示 xxx 出现的次数。

样例输入

11 1

样例输出

4

提示

对于 100%100\%100% 的数据,1≤n≤1061\le n\le 10^61n1060≤x≤90\le x \le 90x9

思路分析
0≤x≤90\le x \le 90x9 ,说明 x 可以是整数的一个数位。
首先,如何查看一个整数 a 的每一个数位呢?这就要用到“数位分离”方法了。

while(a>0){
	a % 10;  //获取整数a的个位
	a /= 10;  //去掉整数a的个位
}

在while循环中,如果发现 a%10 == x 成立,就说明x在a中出现了1次。如果发现一次,计数器就增加1,那么while循环结束后,计数器中就统计出了整数a中出现了几次x。
先在要统计 1 ~ n 的所有整数中,x总共出现了多少次。首先可以让for循环的循环变量 i 从1 变化到n,就可以遍历 1 ~ n 的整数了。
然后,循环体中,使用数位分离查看变量 i 中的每一个数位,是x,计数器就增加1。
注意: 循环体中要先将变量 i 的值赋值给一个临时变量,比如 t 。然后对 t 进行数位分离。否则 i 的值被修改了,就不能遍历 1 ~ n 的整数了。

参考代码

/*
枚举、数位分离
*/
#include<iostream>
using namespace std;
int main() {
	int n,x,tot=0;
	cin>>n>>x;
	for(int i=1; i<=n; i++) {
		int t = i; //先将i的值赋值给变量 t 
		//对 t 进行数位分离
		while(t>0) {
			if(t%10==x) tot++;
			t/=10;
		}
	}
	cout<<tot;
	return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值