一个价格 p(p 为正整数)的不满度定义为: 首先将 p 看做一个由数字组成的字符串(不带前导 0); 然后,如果 p 的最后一个字符是 0,就去掉它。重复这一过程,直到 p 的最后一个字符不是 0; 记 p 的长度为 a,如果此时 p 的最后一位是 5,则不满度为 2a - 1;否则为 2a。 例如,150 的不满度为 3,而 180 则为 4,114514 的不满度为 12。 现在,多莉要卖出一些商品,她能接受的商品价格在 [L, R] 范围内,她希望商品不满度越小越好,请你给出一个不满度最低的价格。用C++实现,如果价格的最小不满度不唯一,则输出价格最低的那一个
时间: 2024-02-12 17:09:48 浏览: 82
将一个整数S随机拆分为N个在min~max之间的整数.txt
以下是C++实现代码:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int getLen(int num) { // 获取数字长度
string s = to_string(num);
if (s.back() == '0') {
s.pop_back();
}
return s.length();
}
int getDiscontent(int num) { // 获取不满度
int len = getLen(num);
if (num % 10 == 5) {
return 2 * len - 1;
} else {
return 2 * len;
}
}
int main() {
int L, R;
cin >> L >> R;
int minDiscontent = 1e9;
int minPrice = L;
for (int i = L; i <= R; i++) {
int discontent = getDiscontent(i);
if (discontent < minDiscontent) {
minDiscontent = discontent;
minPrice = i;
}
}
cout << minPrice << endl;
return 0;
}
```
思路解析:
题目要求找到一个价格范围内的不满度最小的价格,因此我们需要遍历该价格范围内的所有价格,计算它们的不满度,并记录下不满度最小的价格即可。
在计算不满度时,我们可以先将数字转换成字符串,然后去掉最后的 0,再计算字符串的长度即可。
最后输出不满度最小的价格即可。
阅读全文