给定一个 k 位整数 n=d k−1 10 k−1 +⋯+d 1 10 1 +d 0 (0≤d i ≤9, i=0,⋯,k−1, d k−1 >0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 n=100311,则有 2 个 0,3 个 1,和 1 个 3。 输入格式: 每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 n。 输出格式: 对 n 中每一种不同的个位数字,以 d:m 的格式在一行中输出该位数字 d 及其在 n
时间: 2023-05-31 20:20:00 浏览: 1274
### 回答1:
中出现的次数 m,每个数字占一行,按 d 的升序输出。
样例输入:
100311
样例输出:
0:2
1:3
3:1
解题思路:
题目要求统计每种不同的个位数字出现的次数,因此需要遍历整个数,统计每个数字出现的次数。可以使用一个数组来记录每个数字出现的次数,数组下标为数字本身,数组值为出现次数。
代码实现:
### 回答2:
题目描述
给定一个k位整数$n=d_k10^{k-1}+d_{k-1}10^{k-2}+...+d_110^0+d_0\ (0\leq d_i\leq 9,i=0,1,...,k-1,d_{k-1}>0)$,请编写程序统计每种不同的个位数字出现的次数。
例如:给定$n=100311$,则有2个0,3个1,和1个3。
输入格式:
每个输入包含1个测试用例,即一个不超过1000位的正整数n。
输出格式:
对$n$中每一种不同的个位数字,以$d:m$的格式在一行中输出该位数字$d$及其在$n$中出现的次数$m$。按$d$的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1
解题思路
题目要求我们统计每一位数字出现的次数,因此首先我们要将数字中的每一位分离出来。具体地,可以将数字转换成字符串,再遍历字符串中的每一位。 在统计数字个数的过程中,我们可以采用一个桶存储每个数字出现的次数,桶中存储的数字即为该数字。具体地,每遍历到一个数字,就将该数字对应的桶中的数字加1。最后,遍历桶中所有数字,输出不为0的数字和对应的桶值。
C++代码
### 回答3:
首先,从输入中读取这个 k 位整数并存储在一个字符串中,因为这个数字太大了不能直接用 int 或 long 存储。然后遍历字符串中的每一个字符,将字符转换成数字,并建立一个数字数组记录每个数字出现的次数。最后再遍历一遍数字数组,输出每个数字及其出现的次数即可。
具体的实现步骤如下:
1. 从输入中读取该 k 位整数并存储在一个字符串中。
例如:
```
String n = "100311";
```
2. 建立一个长度为 10 的数字数组,数组下标从 0 到 9 分别表示数字 0 到 9 出现的次数。
例如:
```
int[] count = new int[10];
```
3. 遍历字符串中的每个字符,将字符转换成数字,并更新对应数字在数字数组中的出现次数。
例如:
```
for (int i = 0; i < n.length(); i++) {
int digit = n.charAt(i) - '0';
count[digit]++;
}
```
4. 遍历数字数组,输出每个数字及其出现的次数。
例如:
```
for (int i = 0; i < 10; i++) {
if (count[i] > 0) {
System.out.println(i + ":" + count[i]);
}
}
```
完整的 Java 代码如下:
```
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 读取输入
Scanner scanner = new Scanner(System.in);
String n = scanner.next();
// 统计数字出现次数
int[] count = new int[10];
for (int i = 0; i < n.length(); i++) {
int digit = n.charAt(i) - '0';
count[digit]++;
}
// 输出结果
for (int i = 0; i < 10; i++) {
if (count[i] > 0) {
System.out.println(i + ":" + count[i]);
}
}
}
}
```
阅读全文