#language-agnostic #logic
#не зависит от языка #Логические
Вопрос:
Я создаю псевдокод для определения наименьшего и наибольшего числа среди 3 чисел:
Мой код выглядит следующим образом:
If (x >= y)
largest = x
Smallest = y
Else
largest = y
Smallest =x
If (z >= largest)
Largest = z
If (z <= smallest)
Smallest = z
Как вы думаете, это правильно? или есть лучшие способы решить это?
Комментарии:
1. Это должно сработать, если никакие два числа не равны.
2. но что, если 2 числа равны? почему это не сработало бы?
3. 3,3,3. Было бы хорошо, если логика говорит, что все числа равны. Хотя очевидно, что все числа равны, когда наибольшее и наименьшее равны.
Ответ №1:
Допустим, у вас есть произвольные числа x, y, z
.
Псевдокод:
largest = x
smallest = x
if (y > largest) then largest = y
if (z > largest) then largest = z
if (y < smallest) then smallest = y
if (z < smallest) then smallest = z
Это один из способов решить вашу проблему, если вы используете только переменные, присваивание, if-else и сравнение.
Если у вас есть массивы и определенная над ними операция сортировки, вы можете использовать это:
array = [x, y, z]
arrays.sort()
largest = array[2]
smallest = array[0]
Если у вас есть функция max
and min
, которая принимает массив чисел в качестве аргумента, вы можете использовать это:
array = [x, y, z]
largest = max(array)
smallest = min(array)
Если у вас также есть позиционное назначение с использованием наборов, вы можете использовать это:
array = [x, y, z]
(largest, smallest) = (max(array), min(array))
Если у вас есть структура данных, которая сортирует содержимое при вставке элементов, вы можете использовать это:
array.insert([x, y, z])
smallest = array[0]
largest = array[2]
Комментарии:
1. С довольно академической стороны: ваш алгоритм имеет сложность O (n log n). Это можно сделать с помощью O (n)…
2. @Lukas: Я бы сказал, что это O (1) в любом случае 🙂
3. @abeln:
n
это количество элементов в массиве для общего решения (в случае, если имеется более 3 элементов. видите ли, довольно академично … 😉 )4. @Lukas: Я вижу только 3 числа и никакого «общего» решения (если есть n чисел, array [2] не даст вам максимум). Тем не менее, я понимаю вашу точку зрения.
5. @Lukas: Я не указал, какой алгоритм
sort
использует 😉
Ответ №2:
#include <stdio.h>
#include <algorithm>
using namespace std;
int main ( int argc, char **argv ) {
int a = 1;
int b = 2;
int c = 3;
printf ( "MAX = %dn", max(a,max(b,c)));
printf ( "MIN = %dn", min(a,min(b,c)));
return 0;
}
Ответ №3:
Что-то вроде этого было бы более общим (в Java):
// All available values.
int[] values = new int[] { 1, 2, 3 };
// Initialise smallest and largest to the extremes
int smallest = Integer.MAX_VALUE;
int largest = Integer.MIN_VALUE;
// Compare every value with the previously discovered
// smallest and largest value
for (int value : values) {
// If the current value is smaller/larger than the previous
// smallest/largest value, update the reference
if (value < smallest) smallest = value;
if (value > largest) largest = value;
}
// Here smallest and largest will either hold the initial values
// or the smallest and largest value in the values array
Ответ №4:
if (x < y) {
minimum = min(x,z)
maximum = max(y,z)
} else {
minimum = min(y,z)
maximum = max(x,z)
}
Ответ №5:
Представлять числа с помощью a, b и c, предполагая, что никакие два числа не равны.
Прочитайте три числа
- Если a меньше, чем b, то, если a меньше, чем c, выведите a, в противном случае выведите c
- Если b меньше a, то если b меньше c, выведите b, в противном случае выведите c