Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2014, 20:51   #11
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Очень странно, все верно работает, а так да-надо найти второй по величине элемент массива, обсуждалось в другой теме, там все ок было, а теперь хочу все переменные заменить на указатели
Изображения
Тип файла: jpg Безымянный.jpg (22.0 Кб, 142 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 14.12.2014, 21:25   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Верным решение является до первого контрпримера
У вас все числа по одному разу встречаются, из-за чего проблемы не видно.
Пусть max = 4, buf = 2, тогда при встрече 4 произойдет замена значения в buf, как раз и получится max = 4, buf = 4. Подсчет количества вообще будет вести себя очень странно. Нужно иметь два счетчика - для максимума и второго за ним. Если встретили больше максимума, то максимум и его счетчик занесли в буферные, счетчик максимума в значение 1 и записать новый максимум. Если значение меньше максимума, но больше буферного, то нужно сбросить счетчик буферного в 1 и назначить новое значение в буфер.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 14.12.2014, 23:25   #13
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Все равно не работает
Код:
 int max=arr[0],buf,count=0;
    buf=max;
    for (int i=0;i<n;i++)
    {
        count+=(arr[i]==buf);
        if(arr[i]>max)
        {
            buf=max;
            max=arr[i];
            buf=max;

        } else
            if((arr[i]<max)&&(arr[i]>buf)) buf=arr[i];

    }
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 14.12.2014, 23:58   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
float max1 = arr[0], max2;
int countmax1 = 1, countmax2 = -1;
for (int i = 1; i < n; ++i) {
    if (arr[i] > max1) {
        max2 = max1;
        countmax2 = countmax1;
        max1 = arr[i];
        countmax1 = 1;
    } else if (arr[i] == max1)
        ++countmax1;
    else if (arr[i] > max2) {
        max2 = arr[i];
        countmax2 = 1;
    } else if (arr[i] == max2)
        ++countmax2;
}
if (countmax2 > 0)
    printf("\niskomoe chislo: %f\nBsego Bxogenii: %d", max2, countmax2);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение массива с использованием указателей Shelbanin Общие вопросы C/C++ 4 02.05.2013 18:41
Рандомное заполнение стринггрид toha_master Общие вопросы Delphi 4 19.10.2012 00:43
Рандомное заполнение MaxiCool Помощь студентам 1 15.04.2011 18:04
Рандомное заполнение массива и стринггрида Repac123456 Помощь студентам 5 09.11.2010 00:29
Рандомное заполнение массива ac1d_buRn Помощь студентам 15 03.05.2010 09:14