Форум программистов, компьютерный форум CyberForum.ru

Упорядочить 5 чисел за 7 операций - C++

Восстановить пароль Регистрация
 
TonyKing
 Аватар для TonyKing
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 14
16.01.2011, 13:29     Упорядочить 5 чисел за 7 операций #1
Каждый частный придуманный мной алгоритм терпел крах.
Если это попадание пальцем в небо, то, видимо, это мне не по силам.


Упорядочить по невозрастанию 5 чисел за 7 операций сравнения.

Может кто уже сталкивался с такой задачей.
Заранее благодарен.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2011, 13:29     Упорядочить 5 чисел за 7 операций
Посмотрите здесь:

Класс для выполнения операций сложения, вычитания и умножения комплексных чисел C++
Создать динамичный класс для операций с динамическими массивами чисел действительного типа C++
C++ Хранение в контейнере deque целых чисел и проверка основных операций
перегрузка операций в матрице вещественных чисел C++
C++ Программа с классами комплексных чисел и перегрузками операций
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Алексaндр
 Аватар для Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
16.01.2011, 13:35     Упорядочить 5 чисел за 7 операций #2
Цитата Сообщение от TonyKing Посмотреть сообщение
невозрастанию
это по спаданию ???
TonyKing
 Аватар для TonyKing
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 14
16.01.2011, 13:38  [ТС]     Упорядочить 5 чисел за 7 операций #3
a1 => a2 => a3

Вроде так)

Каждый следующий меньше либо равен.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.01.2011, 18:57     Упорядочить 5 чисел за 7 операций #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
TonyKing, Почитайте про сортировку слиянием.
Если разбить 5 чисел на 3 и 2, отсортировать вставкой полученную тройку чисел и двойку чисел. После этого соединить эти две части. При самом плохом раскладе получится 7 сравнений.
TonyKing
 Аватар для TonyKing
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 14
19.01.2011, 16:53  [ТС]     Упорядочить 5 чисел за 7 операций #5
Не хватит.

10 11 12 1 2

Для сортировки до 12 11 10 и 2 1 мы потратим 4 сравнения (вставками).

Дальше слияние нам тут не в помощь, если я правильно понимаю.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.01.2011, 17:44     Упорядочить 5 чисел за 7 операций #6
TonyKing, Да, тут я на 1 обсчитался.
И что-то пока не могу придумать. Постараюсь сегодня вечером посидеть над этой задачей.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2011, 23:43     Упорядочить 5 чисел за 7 операций
Еще ссылки по теме:

C++ Написать функции для выполнения операций над одномерным массивом целых чисел
C++ Вычисление значения логического выражения, состоящего из натуральных чисел, скобок и поразрядных операций
C++ Упорядочить список целых чисел

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
TonyKing
 Аватар для TonyKing
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 14
22.01.2011, 23:43  [ТС]     Упорядочить 5 чисел за 7 операций #7
Может пригодится кому.
Идеальность кода не была целью)

Код
#include <cstdlib>
#include <iostream>

using namespace std;

void swap(int a[], int f, int s) 
{
a[f]=a[f]+a[s];
a[s]=a[f]-a[s];
a[f]=a[f]-a[s];     
}

void show(int a[]) 
{
cout<<endl;
int i=0;
while(i<5) { cout<<a[i]<<" "; i++; }
cout<<endl<<endl;
}

void show2(int ar[], int a, int b, int c, int d, int e)
{
cout<<ar[a]<<" "<<ar[b]<<" "<<ar[c]<<" "<<ar[d]<<" "<<ar[e];     
}

int main(int argc, char *argv[])
{
int a[5];
srand(time(0));
int i=0;
while(i<5) { a[i]= rand()%100; i++; }

cout<<"Ishodnaya:\n";
show(a); 

if(a[0]>a[1]) swap(a,0,1);
if(a[2]>a[3]) swap(a,2,3);
if(a[0]>a[2]) { swap(a,0,2); swap(a,1,3); }

//------------------------------
cout<<"Perviy prohod:\n"; 
show(a);

cout<<"Resultat:\n";
 
if(a[2]>a[4])
{
  if(a[1]>a[2])
  {
    if(a[1]>a[3])
    {
       if(a[0]>a[4])
       show2(a,1,3,2,0,4);
       else
       show2(a,1,3,2,4,0);  
    }
    else
    {
       if(a[0]>a[4])
       show2(a,3,1,2,0,4);
       else
       show2(a,3,1,2,4,0); 
    }             
  }
  else 
  {
     if(a[4]>a[1])
     show2(a,3,2,4,1,0);          
     else
     {
       if(a[0]>a[4])
       show2(a,3,2,1,0,4);           
       else
       show2(a,3,2,1,4,0);     
     }         
  }
             
}
else 
{   
  if(a[3]>a[4])
  {
    if(a[1]>a[4])
    {
      if(a[1]>a[3])
      show2(a,1,3,4,2,0);            
      else
      show2(a,3,1,4,2,0);  
    }
    else
    {
      if(a[1]>a[2])
      show2(a,3,4,1,2,0);             
      else
      show2(a,3,4,2,1,0);   
    } 
  
  }
  else
  {
     if(a[1]>a[3])
     {
       if(a[1]>a[4])
       show2(a,1,4,3,2,0);       
       else
       show2(a,4,1,3,2,0);          
     }
     else
     {
       if(a[1]>a[2])
       show2(a,4,3,1,2,0);             
       else
       show2(a,4,3,2,1,0);  
     }    
  }

}



system("PAUSE");
return EXIT_SUCCESS;
}
Yandex
Объявления
22.01.2011, 23:43     Упорядочить 5 чисел за 7 операций
Ответ Создать тему
Опции темы

Текущее время: 08:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru