#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个最大值。
main函数生成一个包含10个双随机元素的数组(在[0,99]范围内。它打印出这10个元素。提示用户输入 正整数n,然后打印出第n个最大值 阵列。
我的输出如何显示第n个最大值:1当n = 2
时答案 0 :(得分:1)
您在c
之后将if arr[1] != nth_max
递增到2。这意味着c !< n
,因此您在2次循环后退出for
循环。
你需要对整个数组进行排序,b / c你错过了在第二个最大值之前可能有8个副本的情况,例如{8,8,8,8,8,8,8, 8,1,2,8,8,8}。
sort(arr, arr+len);
您应该在数组末尾开始for
循环...
nth_max = arr[len-1];
for (int i = len-1; i >= 0 && c < n; i--)
然后在输出变量y
之前运行该函数:
findNthMax(arr, 10, n, y);
cout << "The nth largest value is: " << y << endl;