Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的代码没有';是否打印正确的最小差值?_C++ - Fatal编程技术网

C++ 为什么我的代码没有';是否打印正确的最小差值?

C++ 为什么我的代码没有';是否打印正确的最小差值?,c++,C++,我目前正试图解决这个问题。问题陈述如下: 输入 第1行:马的数量N 下面的N行:每匹马的力量Pi。Pi是一个整数 输出 两个最接近的强度之间的差异DD是大于或等于0的整数 我使用的是一个std::set,我的算法非常简单,但由于某种原因,它失败了2/8的提交验证器。我没有访问实际测试数据的权限,但根据测试名称,下面的代码无法访问 所有的马都一样强壮 乱七八糟的马 为什么我的代码在输入时失败 #include <iostream> #include <set> usi

我目前正试图解决这个问题。问题陈述如下:

输入 第1行:马的数量N

下面的N行:每匹马的力量Pi。Pi是一个整数

输出 两个最接近的强度之间的差异
D
D
是大于或等于0的整数

我使用的是一个
std::set
,我的算法非常简单,但由于某种原因,它失败了2/8的提交验证器。我没有访问实际测试数据的权限,但根据测试名称,下面的代码无法访问

  • 所有的马都一样强壮
  • 乱七八糟的马
为什么我的代码在输入时失败

#include <iostream>
#include <set>

using namespace std;

int main()
{
    int N;
    cin >> N; cin.ignore();

    set<int> power;

    for (int i = 0; i < N; i++)
    {
        int Pi;
        cin >> Pi; cin.ignore();
        power.insert(Pi);
    }

    int minDiff = 10000000;

    auto i = power.begin();

    while (i != power.end())
    {
        minDiff = min(minDiff, abs(*i - *(++i)));
    }
    
    cout << minDiff << endl;
}
#包括
#包括
使用名称空间std;
int main()
{
int N;
cin>>N;cin.ignore();
设定功率;
对于(int i=0;i>Pi;cin.ignore();
插入功率(Pi);
}
int minDiff=10000000;
自动i=电源。开始();
而(i!=power.end())
{
minDiff=min(minDiff,abs(*i-*(++i));
}

cout如果任意两匹马的力量相同,则您的解决方案将失败:

std::set<int> horses;
horses.insert(1);
horses.insert(2);
horses.insert(1);

// your algorithm returns 1, but it should be 0

使用两个迭代器,如果您想使用
std::set

寻求调试帮助的问题(“为什么此代码不起作用?”),请检查只有一种马的特殊情况必须包括所需的行为、特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题说明的问题对其他读者没有用处。请参阅:“‘我有点迷恋赛马’”,不是每个人都知道“编码名称”是什么,他们也不知道什么是“赛马”应该是。显示您的输出和预期的输出,或者至少添加足够的问题描述,以便有人能够实际帮助您。请不要添加“编辑:”在你的帖子中,每个人都可以看到你的帖子。只需提高你的问题的整体质量,而不增加额外的噪音。最后,但并非最不重要的是,确保你包含了所有的代码。我真的不明白你为什么选择首先使用
std::set
——它可以杀死同样强度的马(你不想要的)与使用普通向量并在输入后对其进行排序相比,效率更低(总之,它们的算法复杂度相同,但
集合
具有更大的常数)。特例不是每匹马都有相同的力量,而是任何两匹马都有相同的力量。如果三匹马有力量1、1、2,我认为OP需要输出1-1=0。@hvd:事实上,这可能是一个提前退出-在插入新的马检查之前,如果它已经存在,在这种情况下,您可以立即退出打印0。
minDiff = std::min(minDiff, abs(*i - *(++i)));