消费者对于商品的价格会有一个不满度。一个价格 p(p 为正整数)的不满度定义为: 首先将 p 看做一个由数字组成的字符串(不带前导 0); 然后,如果 p 的最后一个字符是 0,就去掉它。重复这一过程,直到 p 的最后一个字符不是 0; 记 p 的长度为 a,如果此时 p 的最后一位是 5,则不满度为 2a - 1;否则为 2a。 例如,150 的不满度为 3,而 180 则为 4,114514 的不满度为 12。 现在,多莉要卖出一些商品,她能接受的商品价格在 [L, R] 范围内,她希望商品不满度越小越好,请你给出一个不满度最低的价格。
时间: 2024-02-13 20:03:29 浏览: 62
这是一个数学问题,可以通过编程来解决。以下是一个 Python 代码实现:
```python
def unsatisfied(L, R):
ans = None
for i in range(L, R+1):
s = str(i)
while len(s) > 1 and s[-1] == '0':
s = s[:-1]
if s[-1] == '5':
val = 2*len(s)-1
else:
val = 2*len(s)
if ans is None or val < ans:
ans = val
return ans
```
这个函数接受两个参数 L 和 R,表示价格的范围。它遍历了所有可能的价格,对于每个价格,按照题目要求计算它的不满度,并记录下最小的不满度。最后返回最小的不满度即可。
需要注意的是,由于 L 和 R 可能非常大,这个函数的时间复杂度是 $O((R-L+1)k)$,其中 k 是价格的最大位数。因此,这个算法可能会超时,需要进行优化。
相关问题
一个价格 p(p 为正整数)的不满度定义为: 首先将 p 看做一个由数字组成的字符串(不带前导 0); 然后,如果 p 的最后一个字符是 0,就去掉它。重复这一过程,直到 p 的最后一个字符不是 0; 记 p 的长度为 a,如果此时 p 的最后一位是 5,则不满度为 2a - 1;否则为 2a。 例如,150 的不满度为 3,而 180 则为 4,114514 的不满度为 12。 现在,多莉要卖出一些商品,她能接受的商品价格在 [L, R] 范围内,她希望商品不满度越小越好,请你给出一个不满度最低的价格。用C++实现,如果价格的最小不满度不唯一,则输出价格最低的那一个
以下是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,再计算字符串的长度即可。
最后输出不满度最小的价格即可。
阅读全文