RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1605631
Accepted
Мария
Мария
Asked:2025-01-27 02:39:35 +0000 UTC2025-01-27 02:39:35 +0000 UTC 2025-01-27 02:39:35 +0000 UTC

帮我找到运行时错误

  • 772

如果不太麻烦的话,请告诉我为什么会出现运行时错误。问题:给定一个代码,该代码接收由 1 和 0(没有前导零)组成的正整数序列,并按数字中 1 的数量降序对其进行排序。具有相同单位数的数字必须按值的升序排序。输入格式:输入数据第一行指定序列1≤n≤1000中的数字个数。第二行输入数据包含n个仅由零和一组成的数字1≤ai≤1111111111。数字之间用空格分隔。输出格式:排序的数字序列,以空格分隔。该程序成功通过了 Yandex 竞赛的 4 项测试,但在第 5 项测试中返回了运行时错误。

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

int calc (std::string numbers)
{
int count = 0;
long int n = std::stoi (numbers);
while (n)
{
if (n%10 == 1)
count ++;
n/=10;
}
return count;
}

bool compare (std::string &left, std::string &right)
{
if (calc (left) == calc (right))
{
return std::stoi(left) <= std::stoi(right);
}

return calc(left) > calc(right);
}

int main(){
int count;
std::cin >> count;

std::vector<std::string> nums(count);
for(auto& line : nums) std::cin >> line;

std::sort(nums.begin(), nums.end(), compare);

for(auto& line : nums) std::cout << line << ' ';
}
c++
  • 2 2 个回答
  • 76 Views

2 个回答

  • Voted
  1. Best Answer
    Harry
    2025-01-27T03:11:38Z2025-01-27T03:11:38Z

    不幸的是,比赛已经结束,不让你就这样进入。好吧,既然我已经很兴奋了...试试这个代码,尽管这是作弊行为...:

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <string>
    
    using namespace std;
    
    int ones(std::string&s)
    {
        int o = 0;
        for(char c: s) if (c == '1') ++o;
        return o;
    }
    
    bool compare(std::string &left, std::string &right)
    {
        int l = ones(left), r = ones(right);
        if (l != r) return l > r;
    
        l = left.size(), r = right.size();
        if (l != r) return l < r;
    
        for(int i = 0; i < l; ++i)
        {
            if (left[i] != right[i]) return left[i] < right[i];
        }
        return false;
    }
    
    int main()
    {
    
        int count;
        cin >> count;
    
        std::vector<std::string> nums;
        for(int i = 0; i < count; ++i)
        {
            string m;
            cin >> m;
            nums.push_back(m);
        }
    
        std::sort(nums.begin(), nums.end(), compare);
    
        for(auto& line : nums) std::cout << line << ' ';
    }
    
    • 2
  2. Stanislav Volodarskiy
    2025-01-27T03:37:52Z2025-01-27T03:37:52Z

    对于相等的参数,比较器中的字符串return std::stoi(left) <= std::stoi(right);返回 true。事实不应该如此,比较器应该判断严格的不平等。此错误导致程序在排序过程中崩溃。

    我的机器上最小的示例是一个由十七个单元组成的数组。在您的机器上,示例可能会有所不同,这取决于编译器:

    $ uname -a
    Linux debian 6.1.0-30-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.124-1 (2025-01-12) x86_64 GNU/Linux
    
    $ g++ --version
    g++ (Debian 12.2.0-14) 12.2.0
    Copyright (C) 2022 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    $ g++ temp.cpp
    
    $ echo 17 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | ./a.out
    Segmentation fault
    

    最简单的修复方法是用严格不等式替换非严格不等式。

    附注:感谢 Harry 澄清问题。

    • 1

相关问题

  • 编译器和模板处理

  • 指针。找到最小数量

  • C++,关于枚举类对象初始化的问题

  • 函数中的二维数组

  • 无法使用默认构造函数创建类对象

  • C++ 和循环依赖

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5