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

Найти числа что бы (xi – xj)*(xj – xk) было макс. - C++

Восстановить пароль Регистрация
 
qpaHTa3ep4ik
1 / 1 / 1
Регистрация: 27.11.2011
Сообщений: 9
21.01.2012, 22:10     Найти числа что бы (xi – xj)*(xj – xk) было макс. #1
На прямой задано n точок. Координаты этих точок x1, x2, ..., xn. Нужно найти такие 3 точки i, j и k (xi > xj > xk), что бы значение (xi – xj)*(xj – xk) было максимальным.

Входные данные
Ввести с клавиатуры число n (1< n < pow(10,5). Дальше идут n целых чисел, Которые по модулю не больше pow(10,6).


Вот вариант решения, но задача прошла только 9 из 10 тестов, помогите найти недочёт, по моему дело в типах



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using namespace std;
#include<iostream>
#include<math.h>
int main()
{
      int a[100000],i,n;
      long long v,mx,mn,sr,minr,j;
      cin>>n;
      for(i=0;i<n;i++)
      {
          cin>>a[i];
      }
      mx=a[0];
      mn=a[0];
      for(i=0;i<n;i++)
      {
         if(a[i]>mx){mx=a[i];}
         if(a[i]<mn){mn=a[i];}
      }
       j=(mx+mn)/2;
       minr=mx;
       for(i=0;i<n;i++)
       {
         if(a[i]!=mx&&a[i]!=mn&&fabs(a[i]-j)<minr){sr=a[i];minr=fabs(a[i]-j);}  
       }
       v =(long long)(mx-sr)*(sr-mn);
   //  cout<<v<<" "<<mx<<" "<<mn<<" "<<sr;
    
 cout<<v;
 
       return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2012, 22:10     Найти числа что бы (xi – xj)*(xj – xk) было макс.
Посмотрите здесь:

C++ факториал макс. числа
Динамический многомерный массив. Нахождение макс. числа, которое в массиве встречаеться более 1 раза. C++
C++ Как написать программу-калькулятор чтобы было можно додавать 2 числа, 3 числа, 4 числа, n чисел?
Найти среди двузначных чисел такие, что квадрат числа равен кубу суммы цифр этого числа C++
Работа со стеком (найти мин и макс элемент) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
21.01.2012, 22:49     Найти числа что бы (xi – xj)*(xj – xk) было макс. #2
Пожалуй, имеет смысл сделать j и minr вещественными.
qpaHTa3ep4ik
1 / 1 / 1
Регистрация: 27.11.2011
Сообщений: 9
23.01.2012, 21:14  [ТС]     Найти числа что бы (xi – xj)*(xj – xk) было макс. #3
Нет, на результаты не повлияло...
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
23.01.2012, 21:57     Найти числа что бы (xi – xj)*(xj – xk) было макс. #4
Цитата Сообщение от NoMasters Посмотреть сообщение
Пожалуй, имеет смысл сделать j и minr вещественными.
Пробуйте плюс к этому

C++
1
2
3
4
5
...
double j, minr;
...
j=(mx+mn)/2.0;
...
qpaHTa3ep4ik
1 / 1 / 1
Регистрация: 27.11.2011
Сообщений: 9
23.01.2012, 23:30  [ТС]     Найти числа что бы (xi – xj)*(xj – xk) было макс. #5
Неа, всё те же 90% прохождения теста(
Yandex
Объявления
23.01.2012, 23:30     Найти числа что бы (xi – xj)*(xj – xk) было макс.
Ответ Создать тему
Опции темы

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