为了账号安全,请及时绑定邮箱和手机立即绑定

最小值输出为3,明显错误,应该为1,但不知代码中错在哪,希望各位大神帮忙看一下


#include<iostream>

using namespace std;

#include<stdlib.h>


namespace A

{

int getMaxOrMin(int *a, int count, bool ifMax)

{

int temp = a[0];

int i, j;

if (ifMax)

{

for (i = 1; i < count; i++)

{

for (j = 0; j < count - i; j++)

{

if (a[j] < a[j + 1])

{

temp = a[j + 1];

a[j + 1] = a[j];

a[j] = temp;

}

}

}

cout << temp << "为最大值" << endl;

}

if (!ifMax)

{


for (i = 1; i < count; i++)

{

for (j = 0; j < count - i; j++)

{

if (a[j]>a[j + 1])

{

temp = a[j + 1];

a[j + 1] = a[j];

a[j] = temp;

}

}

}

cout << temp << "为最小值" << endl;

}

for (i = 0; i < count; i++)

{

cout << a[i] << endl;

}

return temp;

}

}


int main()

{

int arr[10] = { 2, 5, 7, 8, 4, 1, 6, 3, 9, 10 };

bool ifMax = false;

cin >> ifMax;

A::getMaxOrMin(arr, 10, ifMax);

system("pause");

return 0;

}


正在回答

1 回答

因为当ifMax=0时,后一个小于前一个则交换位置,说明最后得到的顺序数列是从小到大的,随着i 增大,每次循环都会选出第i大的数,顺序也依次从后往前排好,如果顺序正确则不用进行交换,那么temp的值也不会改变,也就是说当a[j+1]=3与a[j]交换数序以后整个数列的顺序都已正确,最小的那个数就不会赋值给temp了,所以打印出的temp不是最小值。输出的temp应改为a[9]和a[0]。

1 回复 有任何疑惑可以回复我~
#1

qq_BornToBeSome_0 提问者

那怎样优化代码最好呢?
2017-08-12 回复 有任何疑惑可以回复我~
#2

qq_BornToBeSome_0 提问者 回复 qq_BornToBeSome_0 提问者

想输出最大或最小值,就直接输出排序后的数组的第一个数就是了 即:cout<<a[0]<<endl;
2017-08-12 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之起航篇
  • 参与学习       291033    人
  • 解答问题       760    个

C++亮点尽在其中,本课程是在C语言基础上的一个延伸,得以升华

进入课程

最小值输出为3,明显错误,应该为1,但不知代码中错在哪,希望各位大神帮忙看一下

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信