【发布时间】:2019-12-26 20:39:20
【问题描述】:
大家晚上好。我不确定在这个平台上问这样的问题是否违反规则(如果是,请告诉我)。问题是“实践竞赛”。我可以完成 10 个测试用例中的 5 个,但我不确定这有什么问题。请提出任何更正/逻辑/提示...并且时间复杂度必须小于 O(n^2) (根据给定的输入)
我尝试的方法是:
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
signed long int t, n;
scanf("%d", &t);
for (int i = 1; i <= t; i++) {
int count = 0;
scanf("%d", &n);
if (n <= 10)
count = n;
else {
// count = 9;
string s;
s = to_string(n);
int len = s.length();
int x = n / (pow(10, len - 2));
int h = x / 11;
string y = to_string(x);
if (y.length() <= 2)
x = 0;
count = (9 * (len - 1)) + x + h;
}
printf("%d\n", count);
}
return 0;
}
请提出任何您认为有帮助的建议。非常感谢。
【问题讨论】:
-
您的标题不是描述性的。请写一个总结具体问题的标题。看看这里:ask good questions。此外,听起来您正试图让我们为您完成工作。 Understand the difference between "asking a question about your homework" and "asking a specific question about the code in your homework"
-
在计算中可以避免使用
std::string:to_string(n).length()可能会被floor(log10(n) + 1)替换。to_string(x).length() <= 2->x < 100 -
你有没有想过打印所有九个所谓的“美丽数字”,例如,三位数长,特别是 111 到 999,无需实际单独测试每个数字100到999看看是不是所谓的“美数”?如果你花点时间思考这个事实,并围绕它思考,你应该会想到一个更简单的解决方案,并且你应该意识到上面显示的所有代码都是完全错误的方法。
-
另外,您将实际问题发布为图像而不是将其复制粘贴为文本的原因是什么?图片使问题更难理解,更难阅读。
-
@churill PrtScr ;)