Простая логическая задача: нахождение наибольшего и наименьшего числа среди 3 чисел

#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