蓝桥杯试题:计数问题
一、题目描述
试计算在区间 1 到 n的所有整数中,数字 x(0≤x≤9)x(0≤x≤9) 共出现了多少次?
例如,在 1 到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。
输入描述
输入共 1 行,包含 2 个整数 n、xn、x,之间用一个空格隔开。
其中,1≤n≤106,0≤x≤91≤n≤106,0≤x≤9。
输出描述
输出共 1 行,包含一个整数,表示 xx 出现的次数。
二、代码展示
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int x = scan.nextInt();
int count = 0;
for(int i = 1 ;i <= n;i++){
String s = i+ "";
for(int j=0; j < s.length(); j++){
int c = s.charAt(j) - '0';
if(c == x){
count++;
}
}
}
System.out.println(count);
}
}
将数字转换为字符串并逐位检查
String s = i + "";
for(int j = 0; j < s.length(); j++){
int c = s.charAt(j) - '0';
if(c == x){
count++;
}
}
步骤:
1. 转换为字符串:将当前数字 `i` 转换为字符串 `s`,以便逐位访问每个数字字符。
String s = i + "";
这里利用了字符串拼接的特性,将整数 `i` 转换为字符串形式。2. 遍历字符串的每个字符:
for(int j = 0; j < s.length(); j++){
}
使用嵌套的 `for` 循环遍历字符串 `s` 的每一个字符。3. 提取数字并比较:
int c = s.charAt(j) - '0';
if(c == x){
count++;
}
- `s.charAt(j)` 获取字符串 `s` 中索引为 `j` 的字符。
- `s.charAt(j) - '0'` 将字符转换为对应的整数值。这是因为字符 `'0'` 到 `'9'` 在ASCII码中是连续的,减去 `'0'` 可以得到实际的数字值。
- 如果转换后的数字 `c` 等于目标数字 `x`,则将计数器 `count` 增加 1。