Я пытаюсь написать программу, которая берет ввод определенной суммы продаж и выполняет некоторые вычисления на основе трех планов оплаты. Одна из вещей, которую я хочу внести, - это способ выяснить медианную из трех планов. Поэтому, если plan1 = 200, plan2 = 250 и plan3 = 300, я хочу, чтобы компьютер знал, что медиана равна 250. Если кто-то может помочь мне с помощью алгоритма или встроенной функции, я был бы очень признателен.Сортировка массива из трех элементов
ответ
int ra[3] = { plan1, plan2, plan3 };
std::sort(ra, ra+3);
return ra[1];
Может быть, вероятно, сделать более эффективно - то снова, если вы действительно повезло, что компилятор может оптимизировать его для вас.
Код, который "должен" быть более эффективными, вероятно, будет больше, например:
if (plan1 < plan2) {
if (plan2 < plan3) return plan2;
// plan2 is the biggest
return max(plan1, plan3);
} else {
if (plan1 < plan3) return plan1;
// plan1 is the biggest
return max(plan2, plan3);
}
Другая возможность:
void order(int &first, int &second) {
if (second < first) std::swap(first, second);
}
order(plan1, plan2);
order(plan2, plan3);
order(plan1, plan2);
return plan2;
В: Как можно сказать системному программисту от прикладного программиста? A: Системный программист предполагает, что все данные состоят из целых чисел, даже планов оплаты. :) – Michael
@Michael: heh. Фактически произошло то, что я обычно писал функцию шаблона, но полагал, что это слишком сложно для вопрошающего, который не может понять это, и вызовет больше проблем, чем решает. В любом случае, денежные значения * должны * быть целыми числами, хотя и выражены в тысячах пенни ;-) –
Спасибо за ответ, однако, std :: sort, похоже, не является допустимой функцией. У меня есть что-то, называемое std :: qsort, но оно выглядит совсем другим. – emufossum13
int median(int plan1, int plan2, int plan3) {
if (plan1 <= plan2 && plan1 >= plan3 || plan1 <= plan3 && plan1 >= plan2) return plan1;
if (plan2 <= plan1 && plan2 >= plan3 || plan2 <= plan3 && plan2 >= plan1) return plan2;
return plan3;
}
Это запутаться, но это может помочь вам продумайте алгоритм.
Как вы можете заказать три номера? Начните с сравнения двух из них, а затем сравните третий, пока не узнаете, где он находится. Это потребует много операторов if, но покажет вам базовый алгоритм. (Вы также можете использовать любой различные функции сортировки, но так как у вас есть только три элемента, то стоит продумать)
int findMedian(int num1, int num2, int num3) {
if (num1 < num2) {
if (num2 < num3) {
// the order is then num1, num2, num3
return num2;
} else {
// We know num1 is < num2 and num3 is < num2, but don't know
// where num1 and num3 go: num1, num3, num2 or num3, num1, num2?
if (num1 < num3) {
// now we know: num1, num3, num2
return num3;
} else {
// num3, num1, num2
return num1;
}
}
} else {
if (num2 < num3) {
// We know num2 < num1 and num2 < num3, but don't know where num1
// and num3 go: num2, num1, num3 or num2, num3, num1?
if (num1 < num3) {
// now we know: num2, num1, num3
return num1;
} else {
// num2, num3, num1;
return num3;
}
} else {
// We know num2 < num1 and num3 < num2, so num3, num2, num1
return num2;
}
}
}
Это хорошее упражнение, чтобы быть в состоянии продумать все пути алгоритм может течь, и это демонстрирует этот процесс. Если у вас есть логика, вы можете, если вы хотите, сделать его более кратким с трехзначным оператором (и вынимая комментарии):
int findMedian(int num1, int num2, int num3) {
if (num1 < num2) {
if (num2 < num3) {
return num2;
} else {
return (num1 < num3) ? num3 : num1;
}
} else {
if (num2 < num3) {
return (num1 < num3) ? num1 : num3;
} else {
return num2;
}
}
}
Если мы хотим пожертвовать читаемость, мы можем конденсировать его дальше:
int findMedian(int num1, int num2, int num3) {
if (num1 < num2) {
return (num2 < num3) ? num2 : (num1 < num3) ? num3 : num1;
} else {
return (num2 < num3) ? (num1 < num3) ? num1 : num3 : num2;
}
}
Или, мы можем принять его окончательный некрасивый шаг и в конечном итоге с одной строкой:
int findMedian(int num1, int num2, int num3) {
return (num1 < num2) ?(num2 < num3) ? num2 : (num1 < num3) ? num3 : num1 : (num2 < num3) ? (num1 < num3) ? num1 : num3 : num2;
}
- 1. Сортировка наименьшего из трех чисел
- 2. Сортировка массива объектов элементов по атрибуту элементов
- 3. Сортировка элементов массива по частоте его элементов
- 4. Сортировка хэш-элементов внутри массива
- 5. Сортировка и перегруппировки элементов массива
- 6. PHP - сортировка элементов массива на основе элементов другого массива :)
- 7. Поиск медианы с учетом индекса из трех элементов
- 8. Сортировка трех разных массивов
- 9. Codeigniter - сортировка данных из трех таблиц
- 10. Сортировка по любому из трех полей времени
- 11. Сортировка массива из массива PHP
- 12. Сортировка элементов одного массива в разных подрешеток
- 13. Сортировка массива, определение приоритетов для некоторых элементов
- 14. Сортировка элементов галстука
- 15. Сортировка базы данных из массива
- 16. Удаление элементов массива из других элементов массива
- 17. Сортировка части массива из другого массива
- 18. сортировка массива и подсчет его элементов
- 19. Сортировка массива по появлению его элементов
- 20. Сортировка элементов массива в порядке возрастания
- 21. Сортировка массива массивов с переменным числом элементов
- 22. Сортировка массива после числа экземпляров элементов
- 23. сортировка элементов массива с помощью JavaScript
- 24. Сортировка элементов массива с использованием Arrays.sort
- 25. MongoDB - сортировка элементов массива возвращая полный документ
- 26. Сортировка массива элементов по их ID
- 27. Построить строку поиска из трех элементов выбора?
- 28. Получение последних трех элементов из списка/ArrayList?
- 29. питон - сортировка поплавки внутри элементов массива на основе другого массива
- 30. Размещение трех элементов
Там нет такой функции в стандартной библиотеке C, так что вы, вероятно, хотите, чтобы придумать свой собственный для реализации. – overloading