Loading...
MarioMilev avatar MarioMilev 1 Точки

Помощ за алгоритъм

Здравейте. Трябва ми алгоритъм за намирането на двете най-малки числа от три числа. Това е което аз измислих :

 double x, y, z;
 double min1, min2;
 if (x<y)
 {
  min1 = x;
  if (y<=z)
  {
   min2 = y;
  }
  else min2 = z;

 }
 if (y<x)
 {
  min1 = y;
  if (x <= z)
  {
   min2 = x;
  }
  else
   min2 = z;
 }
 if (z<x)
 {
  min1 = z;
  if (x <= y)
  {
   min2 = x;
  }
  else
   min2 = y;
 }


Работи, но съм убеден, че има как да се измисли много по-просто и без толкова if-ове.. Благодаря предварително smiley

Тагове:
0
Programming Basics
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Не знам какво е това дълго нещо дето си написал, но алгоритъмът е:

1. Намираш по-малкото от първите две

2. Намираш по-малкото от намереното в 1. и третото.

0
30/10/2016 16:14:40
MarioMilev avatar MarioMilev 1 Точки

Да,  това беше първото за което се сетих, ама нещо не проработи. Явно нещо пропускам.

1
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Ами напиши го пак и дай да видим защо не работи.

 

0
dmaknev avatar dmaknev 49 Точки

if a > b than if a > c return b and c else a and b

else if b > c return a and c else a and b

Разбира се това може да се запише и във вида:

if a > b than if a > c return b and c

else if b > c return a and c

return a and b

Но понеже още не сме стигнали до там, препоръчвам първия вариант ;) А ако и така не ти е ясно, ето го и съвсем дърварската:

if a > b and a > c return b and c else if b > a and b > c return a and c else a and b

Хм, то пък така май взе че стана по-готино даже ;)

0
AtanasNikolov avatar AtanasNikolov 22 Точки

Защо не пробваш със вложени Math.Min().

Вложен е защото Math.Min() - допуска само две входни стойности.

0
RFilipov avatar RFilipov 136 Точки

Сортираш и взимаш първите две (различни) и работи със всякакъв брой числа.

1
djc_bg2015 avatar djc_bg2015 923 Точки

yes

Ето го имплементирано на C#:

var minTowNums = new[] {18, 2000, 3}
    .OrderBy(e => e)
    .Take(2);


Console.WriteLine(string.Join(", ", minTowNums));

 

1
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Чакай, че се обърках. Тук не сме ли в Programming basics?

0
djc_bg2015 avatar djc_bg2015 923 Точки

Имената на двата метода са достатъчно описателни дори и за човек, който не се заниамва с програмиране.

Кому е нужно да се слагат рамки и какво лошо има в това да се покаже алтернативен подход :)

 

1
dmaknev avatar dmaknev 49 Точки

if a > b than if a > c return b and c else a and b

else if b > c return a and c else a and b

Разбира се това може да се запише и във вида:

if a > b than if a > c return b and c

else if b > c return a and c

return a and b

Но понеже още не сме стигнали до там, препоръчвам първия вариант ;) А ако и така не ти е ясно, ето го и съвсем дърварската:

if a > b and a > c return b and c else if b > a and b > c return a and c else a and b

Хм, то пък така май взе че стана по-готино даже ;)

0
sktomov avatar sktomov 49 Точки

Math.Min(a, Math.Min(b, c));

0
dakata avatar dakata 26 Точки

Това е моето решение като за начинаещ:

using System;
using System.Collections.Generic;
namespace MyTest
{
    class Program
    {
        static void Main()
        {
            List<double> myList = new List<double>();
            for (int i = 1; i <= 3; i++) myList.Add(double.Parse(Console.ReadLine()));
            myList.Sort();
            Console.WriteLine($"Min1: {myList[0]}\nMin2: {myList[1]}");
        }
    }
}

 

0
dmaknev avatar dmaknev 49 Точки

Човека трябва да се упражнява! Защо му правите мечешки услуги с Math.Min() ?!

0
boykostoyanoff avatar boykostoyanoff 15 Точки

http://pastebin.com/0LxH6TNA

 

това е най простото което можеш да направиш според мен.

            if (x > y)
            {
                x = y;
            }
            if (x > z)
            {
                x = z;
            }

и най-малкото ти остава в X.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.