Форум Всеукраїнської інтернет-олімпіади NetOI


На форумі обговорюються лише питання, пов'язані з олімпіадою

Ви не зайшли.

#1 2015-11-12 16:28:50

LVV
Олімпієць
Звідки: Олешки
Зареєстрований: 2010-11-19
Повідомлень: 360
Вебсайт

Розбір рішень. Задача Schoolnet2015

Задача, на мій погляд дуже проста: пошук найбільшого елемента (та його індекса) в числовому масиві, хоча завуальована до неможливості.

Код:

#include <iostream>
using namespace std;
int main()
{
 int N;
    cin >> N;

    int *M = new int [N];
        for(int i=0; i<N; i++)
            cin >> M[i];
int max=M[0], index=0;
for(int i=0; i<N; i++)
    if (M[i]>max)
    {
        max=M[i];
        index=i;
    }
    cout << max+1 << " " << index+1;
    return 0;
}

Відредаговано LVV (2015-11-12 16:35:49)


Вік живи - вік навчайся.

Поза форумом

 

#2 2015-11-12 16:37:07

LVV
Олімпієць
Звідки: Олешки
Зареєстрований: 2010-11-19
Повідомлень: 360
Вебсайт

Re: Розбір рішень. Задача Schoolnet2015

skmg написав:

викинути масив та шукати максимум безпосередньо у вхідному потоці?

Але і в такому випадку маємо лише 19 балів

Журі вже виправилося, майже в усіх 20 балів. smile (змінив своє попереднє повідомлення)
Хоча навіть один бал вартий того, щоб викинути масив.

Відредаговано LVV (2015-11-12 16:38:50)


Вік живи - вік навчайся.

Поза форумом

 

#3 2015-11-12 18:37:20

oleg_teacher
Новий користувач
Зареєстрований: 2015-09-07
Повідомлень: 4

Re: Розбір рішень. Задача Schoolnet2015

цікаво, повторна перевірка вручну натестах дає "Набрано баллов: 20 из 20."
А в результатах 19.
Масви ніякі не використовувалися.. поточне читання в змінну.. і перевірка  на максимум((

Поза форумом

 

#4 2015-11-13 01:39:25

Юрій Прокопець
Новий користувач
Звідки: Київ, Україна
Зареєстрований: 2015-02-01
Повідомлень: 2

Re: Розбір рішень. Задача Schoolnet2015

#include <iostream>
using namespace std;
int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    size_t n, ans(0), ans_idx, tmp;
    cin >> n;
    for(size_t i = 0; i < n; ++i)
    {
        cin >> tmp;
        if(tmp > ans)
            ans = tmp, ans_idx = i;
    }
    cout << ans+1 << ' ' << ans_idx+1 << '\n';
    return 0;
}
Чому цей розв'язок дає на одному тесті неправильну відповідь?

Поза форумом

 

#5 2015-11-13 01:41:24

andervish
Новий користувач
Зареєстрований: 2011-01-16
Повідомлень: 25

Re: Розбір рішень. Задача Schoolnet2015

Потому что не учтен случай, когда ни одного кабеля не проложено. Надо ans=-1 инициализировать.

Відредаговано andervish (2015-11-13 01:42:32)

Поза форумом

 

#6 2015-11-16 19:27:15

Mobivlad
Новий користувач
Зареєстрований: 2015-08-31
Повідомлень: 4

Re: Розбір рішень. Задача Schoolnet2015

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int *a = new int[n];
    cin >> a[0];
    int max = a[0];
    for (int i = 1; i < n; i++){
        cin >> a[i];
        if (max < a[i]){
            max = a[i];
        }
    }
    for (int i = 0; i < n; i++){
        if (a[i] = max){
            cout << max + 1 << " " << i + 1 << endl;
            return 0;
        }
    }
    return 0;
}
Що тут є неправильного?

Поза форумом

 

#7 2015-11-23 13:39:02

Belitoron
Новий користувач
Зареєстрований: 2015-11-13
Повідомлень: 5

Re: Розбір рішень. Задача Schoolnet2015

Mobivlad написав:

Що тут є неправильного?

1) Основна помилка в умові, яка в другому циклі:

Код:

 if (a[i] = max){

на С++ для перевірки умови треба писати ==. А ти просто присвоїв першому ж елементу масиву значення max.
В тебе проходили тільки ті тести, де правильною відповіддю була школа №1

2) Це не вплинуло на правильність роботи програми, але разом з тим:

Код:

using namespace std;

В цьому просторі імен оголошений макрос max, який вертає максимум із двох змінних. Хоч компілятор і зрозумів, що ти маєш на увазі локальну змінну, а не макрос із std, але краще змінні так не називати.
Більшість IDE підсвічують слово max не як змінну, а як зарезервоване слово мови С++. Це як мінімум незручно.

Поза форумом

 

Нижній колонтитул

Powered by Likt
© Copyright 2002–2009 Likt