#include <iostream>
#include <cstdlib>
#include <ctime>
#include<algorithm>
using namespace std;
bool findNthMax(double arr[], int len, int n, double& nth_max)
{
sort(arr, arr+n);
//Counter
int c = 1;
//Initialize nth max
nth_max = arr[0];
//Loop in the array while the count is less than (n)
for (int i = 0; i < len && c < n; i++)
{
if (arr[i] != nth_max)
c++;
nth_max = arr[i];
}
return nth_max;
}
int main()
{
int n;
double arr[10];
double y;
cout << "The random array elements are:" << endl;
srand((unsigned)time(0));
for(int i=0; i<10; i++){
arr[i] = (rand()%100);
cout << arr[i] << ' ' ;
}
cout << endl;
cout << "Input a positive integer n: " ;
cin >> n ;
if(n>10)
cout << "The nth largest value does not exist." << endl;
else
cout << "The nth largest value is: " << findNthMax(arr, 10, n, y) << endl;
return 0;
}
編輯:如果第n個最大值不存在,函數返回false;第一個參數是輸入數組;第二個參數是數組大小;第三個參數用於將n的值傳遞給函數;最後的 參數是找到的第n個最大值。排列中第k個最大元素
主函數生成一個包含10個雙隨機元素的數組(在[0,99]範圍內),輸出這10個元素,提示用戶輸入一個 正整數n,然後輸出第n個最大值。在 陣列
我的輸出如何以往顯示第n個最大的:1,當n = 2
爲什麼要退布爾? – 0x499602D2 2015-03-02 18:19:20
不太清楚你在做什麼。但是如果你傳遞長度爲n的數組,那麼應該總是達到m = n「最大」的值。如果數量大於元素數量,則可以返回false。對於其他情況,只需對數組進行排序並返回索引值m(m-最大)的值。 – matthias 2015-03-02 18:22:05
您正在打印布爾返回值,而不是結果(將其容易混淆地寫入'y',而返回值沒有意義,當然與描述不符)。我想你想排序整個數組,而不僅僅是第一個'n'元素,並且可能以相反的順序。一般來說,您希望在調試器中逐步查看代碼,看看它實際上在做什麼,以及與您希望執行的操作有什麼不同。 – 2015-03-02 18:26:51