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

Бронзовый призер - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
24.10.2010, 17:28     Бронзовый призер #1
Лимит времени 2000/4000/4000/4000 мс. Лимит памяти 65000/65000/65000/65000 Кб. Сложность Альфа

В соревнованиях по бегу принимают участие N спортсменов (3 ≤ N ≤ 1000). Результаты забега занесены в массив по порядку номеров участников. Все результаты участников различны. Определить время (результат) бронзового призёра.

Ввод
Первая строка содержит N - количество участников забега. Следующая строка содержит результаты каждого участника забега (через пробел) в последовательности номеров участников.
Вывод
На экран выводится время (результат) бронзового призёра.

ввод:
5
1 8 4 9 2
вывод:
4


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
#include <iostream>
using namespace std;
  int a[100];
int main() {
 
  int n;
  cin>>n;
  for (int i=0;i<n;i++){
    cin>>a[i];
  }
  for (int i=0;i<n-1;i++){
    for (int j=i+1;j < n;j++) {
      if (a[i]>a[j]){
        int temp=a[j];
        a[j]=a[i];
        a[i]=temp;
      }
    }
  }
  for (int i=0;i<n;i++){
   
  }
   cout<<a[2]<<endl;
  return 0;
}
всё нормально компилирвуется. Но контестор пишет: Runtime Error
В чем может быть причина?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.10.2010, 17:31     Бронзовый призер #2
Hardcore, Зачем?
C++
1
2
3
  for (int i=0;i<n;i++){
   
  }
Зачем глобальная переменная массив?

Цитата Сообщение от Hardcore Посмотреть сообщение
В соревнованиях по бегу принимают участие N спортсменов (3 ≤ N ≤ 1000).
C++
1
  int a[100];
Нелогично как-то. Выход за пределы будет при более 100.
Используйте динамику.
+ такая сортировка при 1000 элементов будет долгая.
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
24.10.2010, 17:34  [ТС]     Бронзовый призер #3
Что посоветуешь?
papochka
24.10.2010, 17:36
  #4

Не по теме:

//потерто

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.10.2010, 17:40     Бронзовый призер #5
Hardcore, Использовать динамику. И либо сортировать, либо искать третий минимальный элемент. Либо использовать готовое: std::sort.
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
24.10.2010, 17:45  [ТС]     Бронзовый призер #6
а как можно использовать готовыую сортировку?
можно пример?
papochka
 Аватар для papochka
32 / 32 / 2
Регистрация: 14.11.2009
Сообщений: 137
24.10.2010, 17:46     Бронзовый призер #7
например, вики и вот ещё
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
24.10.2010, 17:55  [ТС]     Бронзовый призер #8
написал вот это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>
 using namespace std;
int main() {
  int arr[20];
  int n;
  cin>>n;
  for (int i=0; i<n; i++){
      cin>>arr[i];
  }
  int elements = sizeof(arr) / sizeof(arr[0]); 
  sort(arr, arr + elements);
  for (int i = 0; i < elements; ++i) 
     cout << arr[2] << ' ';
}
ввод:
5
5 4 6 3 7

вывод:
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -85
8993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -85899
3460 -858993460 -858993460 -858993460 -858993460 -858993460 Для продолжения нажм
ите любую клавишу . . .

что делать?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.10.2010, 18:06     Бронзовый призер #9
Hardcore,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
 using namespace std;
int main() {
  int *arr;
  int n;
  cin>>n;
  arr=new int[n];
  for (int i=0; i<n; i++){
          cin>>arr[i];
  }
  int elements = sizeof(arr) / sizeof(arr[0]); 
  sort(arr, arr + elements);
  cout << arr[2] << ' ';
  delete[] arr;
  return 0;
}
papochka
24.10.2010, 18:08
  #10

Не по теме:

Lavroff,а почему нет delete [] arr ? Сколько сегодня наблюдал, практически все это пропускают. Почему? Меня знакомый программист приучает: "Выделил память - чисти за собой"..

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.10.2010, 18:11     Бронзовый призер #11
papochka, Есть) Код пишу прям тут, поэтому иногда не сразу дописываю.

Добавлено через 2 минуты
Точнее так. Динамика ведь...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
 using namespace std;
int main() {
  int *arr;
  int n;
  cin>>n;
  arr=new int[n];
  for (int i=0; i<n; i++){
          cin>>arr[i];
  }
  int elements = n;
  sort(arr, arr + n);
  //copy(arr, arr+n, ostream_iterator<int>(cout, " "));
  cout << arr[2] << ' ';
}
papochka
24.10.2010, 18:35
  #12

Не по теме:

опять

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.10.2010, 18:37     Бронзовый призер #13
papochka, А вот тут да) Согласен) Не скопировалось удаление и return.
Корректное:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
 using namespace std;
int main() {
  int *arr;
  int n;
  cin>>n;
  arr=new int[n];
  for (int i=0; i<n; i++){
          cin>>arr[i];
  }
  int elements = n;
  sort(arr, arr + n);
  cout << arr[2] << ' ';
  delete[] arr;
  return 0;
}
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
24.10.2010, 18:55  [ТС]     Бронзовый призер #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
 using namespace std;
int main() {
  int *arr;
  int n;
  cin>>n;
  arr=new int[n];
  for (int i=0; i<n; i++){
          cin>>arr[i];
  }
  int elements = n;
  sort(arr, arr + n);
  cout << arr[2] << ' ';
  delete[] arr;
  return 0;
}
Пишет wrong answer.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
24.10.2010, 18:55     Бронзовый призер #15
Я обычно при выделении памяти сразу ставлю очищение (как открывающая и закрывающая фигурные скобки), и внутри этой "конструкции" пишу дальше)))
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.10.2010, 19:00     Бронзовый призер #16
Hardcore, Значит вы придумали неверный алгоритм. Ибо сортирует он верно -> выводит второй (третий) элемент. Больше ничего особого программа не делает.
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
24.10.2010, 19:05  [ТС]     Бронзовый призер #17
Просто в контесторе есть тесты. Какиета условия я не учел( ну да ладно и на этом спасибо.
Yandex
Объявления
24.10.2010, 19:05     Бронзовый призер
Ответ Создать тему
Опции темы

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