Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.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++_Sorting_Difference - Fatal编程技术网

C++ 查找数字之间的最大差异

C++ 查找数字之间的最大差异,c++,sorting,difference,C++,Sorting,Difference,给定n个数,找出其中两个数之间的最大差值。例如,对于输入数据17-6,我们有13=7-(-6)。但我的代码似乎没有输出正确的结果: #include <iostream> #include <algorithm> int main() { int n, j, k; std::cin >> n; int *a; a = new int[n]; for (j=0; j<n; j++) { st

给定n个数,找出其中两个数之间的最大差值。例如,对于输入数据17-6,我们有13=7-(-6)。但我的代码似乎没有输出正确的结果:

#include <iostream>
#include <algorithm>
int main()
{
    int n, j, k;
    std::cin >> n;
    int *a;
    a = new int[n];

    for (j=0; j<n; j++)
    {
        std::cin >> a[j];
    }

   std::sort(a, a + sizeof(int));


    k=a[n-1]-a[0];
    std::cout << k;

    delete [] a;

    return 0;
}
#包括
#包括
int main()
{
int n,j,k;
标准:cin>>n;
int*a;
a=新整数[n];
对于(j=0;j>a[j];
}
排序(a,a+sizeof(int));
k=a[n-1]-a[0];

std::cout您的问题在于调用std::sort时

你可以:

std::sort(a, a + sizeof(int));
因此,实际上您只对4个元素进行排序(大部分时间sizeof(int)=4)。要获得正确的结果,您可以执行以下操作:

std::sort(a, a+n); (better)

std::sort(a, &a[n]);

正如Olivier所回答的,您的错误在于调用std::sort(),但我想指出,除非这是您的任务所必需的(它可能是家庭作业的一部分),否则您不需要对数组进行排序,也不需要数组

#include <iostream>
#include <climits>

int main() {
    int n, j, a;
    int max = INT_MIN;
    int min = INT_MAX;

    if ( std::cin >> n  &&  n > 0 ) {
        while ( j < n  &&  std::cin >> a ) {
            if ( a < min ) min = a;
            if ( a > max ) max = a;
            j++;
        }    
        std::cout << max - min;
    }
    return 0;
}
#包括
#包括
int main(){
int n,j,a;
int max=int_MIN;
int min=int_MAX;
如果(标准::cin>>n&&n>0){
而(j>a){
如果(amax)max=a;
j++;
}    

std::cout
std::sort(a,a+sizeof(int));
只对第一个
sizeof(int)
(应该是4)元素进行排序。您的代码给出了什么结果?@Abstraction:“应该是4”我不同意。8现在是
sizeof(int)的合理值此外,在DOS模拟器中,似乎有许多印度软件开发者仍然没有使用任何可识别的理由使用80Turbo C++,对于他们来说,代码> > SIEZOF(int)< /> >最多是2。<代码> siZeof(int)=4 < /Cord>这是一个没有根据的假设。
不,它有未定义的行为。
a+n
是正确的。更正时Ping我。sizeof(int)=4在大多数情况下是正确的。我这样说是为了说明问题。我没有在代码中接受这个假设,你错了。
&a[n]
有未定义的行为,正如我已经说过的。教它,特别是教初学者,是非常不负责任的。“最终生成的代码将完全相同。”不,这是另一个没有根据的假设。我同意你的观点,(a+n)比&a[n]好在这个意义上,我将修改我的回答,但这在C数组中是完美的。我认为,如果你想成为一名优秀的低级程序员,就需要理解为什么&a[n]相当于C数组的(a+n)