我想获取数组中三个最大数字的总和。将它们升序排序后,我将最后三个求和即可得出结果。这是有趣的事情发生的时候-在计算总和之前,我在其中测试了排序的注释代码实际上是使代码正确的原因。当我删除/评论它时,答案变得不同。
然后,我尝试仅打印n,它再次正常工作,并且在对其进行注释后,结果再次错误地更改了。
int main()
{
int n;
cout<<"n: ";
cin>>n;
int a[n-1];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
/*
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
*/
cout<<endl;
//cout<<n<<endl;
int ourSum = a[n-1] + a[n-2] + a[n-3];
if(n>2)cout<<"The sum of the 3 biggest is "<<ourSum<<endl;
else cout<<"Need at least three numbers"<<endl;
打印周期或n打印: n:6 654321 1 2 3 4 5 6 3个最大的总和是15
没有上面正在评论的东西: n:6 654321 3个最大的总和是12
因此,当评论处于活动状态时,答案将正确显示:15.但是,当评论/删除评论时,结果为12。我不知道是什么原因造成的,因此在此我希望能得到一个解释。
答案 0 :(得分:0)
int a[n-1];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
您分配的内存少于实际使用的内存。期。这是一种不确定的行为,请享受您的鼻重音。自您进入UB的世界以来,一切都可以观察到。
分配n
个整数,而不是n-1
。
我不会夸大您重新实现气泡排序的尝试,即使与经典气泡排序实现相比,它的效率也很低,如果n小于3,您会得到另一个UB ...我想这是出于您的问题范围。