C++输入一个正整数n,找到n中最小的数位数字x,统计x出现的次数s,以及它最左侧的出现位置lpos简单做法
时间: 2024-12-20 12:19:51 浏览: 6
在C++中,要找到给定正整数`n`中最小的数位数字`x`,统计它的出现次数`s`,以及它最左侧的出现位置`lpos`,可以按照以下步骤进行:
1. **初始化**:
- 初始化计数器`s`为0,表示`x`的出现次数;
- 初始化变量`lpos`为-1,表示`x`的左边界位置;
- 将数字`n`转换成字符串,方便遍历每个字符。
```cpp
int s = 0;
int lpos = -1;
string n_str = to_string(n);
```
2. **遍历字符串**:
- 使用循环遍历字符串`n_str`中的每一个字符,将它们转换回整数`digit`。
- 比较当前`digit`是否小于等于`x`。如果是,则更新计数器`s`并检查是否是第一次遇到这个值(即位置更靠左),更新`lpos`。
```cpp
for (size_t i = 0; i < n_str.length(); ++i) {
int digit = n_str[i] - '0'; // 字符转数字
if (digit <= x && (lpos == -1 || i < lpos)) { // 更新位置和计数
s++;
lpos = i;
}
}
```
3. **结果输出**:
- 返回最小数位数字`x`,计数`s`,以及最左侧的位置`lpos`。
```cpp
return x, s, lpos;
```
完整的函数示例:
```cpp
pair<int, pair<int, int>> find_min_digit_and_stats(int n) {
int s = 0;
int lpos = -1;
string n_str = to_string(n);
for (size_t i = 0; i < n_str.length(); ++i) {
int digit = n_str[i] - '0';
if (digit <= x && (lpos == -1 || i < lpos)) {
s++;
lpos = i;
}
}
return make_pair(x, make_pair(s, lpos));
}
```
阅读全文