[英]I need to find the closest (and minor) number to the average in the given numbers.
我需要找到與給定數字中的平均值最接近(和次要)的數字。 例如:
如果給定數字為1,2,3,4,5,則平均值將為3,最接近的數字為2和4,但次要數字為2,因此結果應為2。
或者,如果給定的數字為1、325、350、299,則平均值為243.75,因此最接近的數字為299。
我只設法找到平均值。
#include <iostream>
using namespace std;
int main() {
int n, i;
float num[100], sum=0.0, average;
n = 10;
while (n > 100 || n <= 0) {
cin >> n;}
for(i = 0; i < n; ++i) {
cin >> num[i];
sum += num[i];
} average = sum / n;
cout << average;
return 0;
}
找到平均值后,您可以再次遍歷數組並找到最接近的數字:
float closest = num[0];
float diff = abs(average - closest);
for(i = 1; i < n; ++i) {
float curr_diff = abs(average - num[i]);
if (curr_diff < diff || (curr_diff == diff && num[i] < closest) {
closest = num[i];
diff = curr_diff;
}
}
這是使用算法函數的解決方案:( std :: upper_bound , std :: sort )和<numeric>
庫中的函數std :: accumulate )
#include <algorithm>
#include <numeric>
#include <iostream>
#include <cmath>
int main()
{
float values[] = { 1, 2, 3, 4, 5 };
const int numValues = sizeof(values) / sizeof(float);
// get the average
float average = std::accumulate(values, values + numValues, 0.0F) / numValues;
// sort the values
std::sort(values, values + numValues);
// find where the average would be inserted
float *closest = std::upper_bound(values, values + numValues, average);
// assume closest is the value greater than average
float *absClosest = closest;
// check number before the insertion point
if (closest != values)
{
float *closest2 = closest - 1;
// get the difference in both numbers and average
if (fabs(*closest2 - average) < fabs(*closest - average))
absClosest = closest2;
}
std::cout << "The average is " << average << "\nThe closest to average is " << *absClosest;
}
您將需要檢查最接近的,較小的值並且不等於平均值。 因此,它可能類似於:
#include <cstdio>
#include <math.h>
using namespace std;
int main( int argc, char ** argv )
{
int n = 5;
float num[] = {1,2,3,4,5};
float average = 3;
float smallValue = 0.0001;
float closest = num[0];
float diff = fabs(average-closest);
for (int i = 1; i < n; ++i) {
float curr_diff = fabs(average - num[i]) ;
if ((curr_diff + smallValue) < diff && fabs(num[i] - average) > smallValue)
{
closest = num[i];
diff = curr_diff;
}
}
return 0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.