亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

最小值輸出為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++遠征之起航篇
  • 參與學習       290974    人
  • 解答問題       817    個

C++亮點盡在其中,本課程是在C語言基礎上的一個延伸,得以升華

進入課程

最小值輸出為3,明顯錯誤,應該為1,但不知代碼中錯在哪,希望各位大神幫忙看一下

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號