Я был присвоен для установки массива с точками. Мне говорят получить максимальное значение, среднее число, и в этом том же массиве, если какая-либо точка в массиве является дважды средним числом, я должен cout
"изолированная часть". До сих пор я получил средние и максимальные количества в массиве. но я не могу установить программу на cout
изолированная часть. Вместо этого это дает мне несколько из среднего числа. вот программа;
int main()
{
const int max = 10;
int ary[max]={4, 32, 9, 7, 14, 12, 13, 17, 19, 18};
int i,maxv;
double out,sum=0;
double av;
maxv= ary[0];
for(i=0; i<max; i++)
{
if(maxv<ary[i])
maxv= ary[i];
}
cout<<"maximum value: "<<maxv<<endl;
for(i=0; i<max; i++)
{
sum = sum + ary[i];
av = sum / max;
}
cout<<"average: "<<av<<endl;
out = av * 2;
if(ary[i]>out)
{
cout<<"outlier: "<<maxv<<endl;
}
else
{
cout<<"ok"<<endl;
}
return 0;
}
Вот решение вашего задания на C ++, но вам, вероятно, не разрешат передать его; -)
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <numeric>
int main()
{
const int N = 10;
int ary[N] = {4, 32, 9, 7, 14, 12, 13, 17, 19, 18};
int max = *std::max_element(ary, ary + N);
std::cout << "maximum: " << max << std::endl;
double average = std::accumulate(ary, ary + N, 0.0) / N;
std::cout << "average: " << average << std::endl;
std::cout << "outlier: ";
std::remove_copy_if(ary, ary + N,
std::ostream_iterator<int>(std::cout, " "),
std::bind2nd(std::less_equal<double>(), 2 * average));
std::cout << std::endl;
}
Вам нужно использовать два цикла for. Вы должны пройти по ary
и проверить каждый элемент по out
, затем cout << ary[i]
.
Возможно, это было бы немного более очевидно, если бы вы объявляли свои переменные там, где они используются, в минимально возможной области видимости.
Например:
for (int i = 0; ...) {
}
и
double outlier = avg * 2;
Кстати, это может быть немного не в вашу голову (прямо сейчас), но STL предоставляет функции для определения max
(max_element) и sum
(accumulate) массива. Возможно, будет интересно почитать.
Если оно ровно вдвое больше среднего, оно должно быть '==', а не больше, чем вдвое больше среднего.
А почему вы выводите maxv
? Старайтесь использовать более значимые имена.
Не следует ли вам вместо этого вывести ary [i]
?
Кроме того, почему вы не зацикливаете массив снова с помощью цикла for? Разве вы не должны перебирать его, чтобы найти все планировщики, или следует проверять только последний элемент для планировщика.
Ваш код содержит тонкую и сложную для обнаружения ошибку. Вы используете ary[i] после последнего цикла for. В этот момент значение i равно max, поэтому оператор if сравнивает случайную память, поскольку вы переходите к концу массива.
Поскольку это C++, а не C, вы могли бы избежать этой конкретной ошибки, объявив переменные цикла в цикле for следующим образом
for (int i = 0; i < max; ++i) {
....
}