Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.10.2021
Сообщений: 1

Как за один проход по массиву найти 2 наименьших элемента и их индексы без того чтобы сортировать массив?

12.10.2021, 10:24. Показов 2609. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int arr[7] = {4,5,1,5,-2,-3,-27};
    int a=arr[0];
    int b=arr[1]; 
    int aIndex=0;
    int bIndex=0;
 
    for (int i=0; i<7; i++)
    {
        if (arr[i] < a){
            a=arr[i];
            aIndex=i;
        }
        else if(arr[i] != a && arr[i] < b)
        {
            b=arr[i];
            bIndex = i;   
        }
    }
    printf("One of the smallest value in array is %d and index is %d, another is %d and index is %d",a,aIndex,b,bIndex);
В коде выше находит только первый наименьший, а второй неправильный
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2021, 10:24
Ответы с готовыми решениями:

Найдите за один проход по массиву 3 его различных элемента, которые меньше всех остальных. Три минимума
Не могу написать код к этой задаче, прошу помощи у вас

Найти максимальный элемент массива и их количество за один проход по массиву
Дан массив целых чисел. Найти максимальный элемент массива и их количество за один проход по массиву.

Найдите за один проход по массиву три его различных элемента,которые меньше всех остальных(три минимума)
const n=10; type myarray=array of integer; var a:myarray; m,k:integer; function minimum (m:myarray):integer; var i,min:integer; ...

5
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
12.10.2021, 12:04
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
#include <stdio.h>
#define SWAP(x,y) (x=x+y, y=x-y, x=x-y) 
 
int main(void)
{
    int arr[7] = {4,5,1,5,-2,-3,-27};
    int aIndex=0;
    int bIndex=1;
 
    if(arr[aIndex] > arr[bIndex])
    {
//printf("%d %d\n", arr[aIndex], arr[bIndex]);
        SWAP(aIndex, bIndex);
    }
 
    for (int i=2; i<7; i++)
    {
        if (arr[i] < arr[aIndex])
        {
            SWAP(aIndex, bIndex);
            aIndex = i;
            continue;
        }
        if (arr[i] < arr[bIndex])
        {
            bIndex = i; 
        }
    }
    printf("%d %d", arr[aIndex], arr[bIndex]);
//    printf("One of the smallest value in array is %d and index is %d, another is %d and index is %d",a,aIndex,b,bIndex);
    return 0;
}
Добавлено через 12 минут
А еще, при инициализации массивов лучше писать так
C
1
2
3
4
5
6
7
8
9
10
int arr[] = {4,5,1,5,-2,-3,-2};
int size = sizeof(arr)/sizeof(arr[0]);
.
.
 
for (int i=2; i<size; i++)
{
.
.
}
ТО есть, при изменении массива не придется в цикле размер менять
1
2487 / 1151 / 709
Регистрация: 25.04.2016
Сообщений: 3,315
12.10.2021, 15:06
Цитата Сообщение от мама Стифлера Посмотреть сообщение
лучше писать так
ни в коем случае, такая конструкция будет работать только в той же функции, в которой вы инициируете массив. И если вы передадите массив в функцию, и попытаетесь таким образом определить его размер там, то получите шикарнейший болт. Так что лучше сразу же отвыкать от странных конструкций.

В си размеры массивов задаются явно, и более никак. Даже когда вы работаете с динамическим массивом, его размер заранее известен в каждый момент времени.

Так что потрудитесь посчитать размер массива и определить его через define, это и быстрее, и обращений к памяти меньше, и никакой головной боли в дальнейшем.

Си и лень априори несовместимы.
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
12.10.2021, 15:30
Цитата Сообщение от stake-k26 Посмотреть сообщение
И если вы передадите массив в функцию, и попытаетесь таким образом определить его размер там, то получите шикарнейший болт
А зачем определять размер по несколько раз? Одного раза хватит, а в функцию уже передавать известный нам размер.
0
12.10.2021, 15:38

Не по теме:

Цитата Сообщение от мама Стифлера Посмотреть сообщение
Одного раза хватит,
«640 Кбайт должно быть достаточно для каждого» (с) Билл Гейтс. 1981 год, времена создания первых IBM PC и MS DOS 1.0

0
2487 / 1151 / 709
Регистрация: 25.04.2016
Сообщений: 3,315
12.10.2021, 15:56
мама Стифлера, а затем, что новичок, который в этом ничего не понимает, смотрит и думает, о класс, есть вот такой способ определения размера массива, наверное универсальный, и начинает юзать его везде, где только можно. Вон, полистайте старые темы на форуме, в каждой седьмой такой способ используется не по назначению.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2021, 15:56
Помогаю со студенческими работами здесь

Метод поиска по массиву уникальных чисел за один проход
Подскажите какой-нибудь интересный метод поиска по массиву для данного случая: Есть массив {1, 1, 2, 3, 3}; Надо найти неповторяющееся...

Найти число минимальных элементов массива за один проход без использования дополнительной памяти
Найти число мин. элементов за один проход без использования массива. (Числа мы записываем в файл , потом считываем находим число мин. элем...

За единственный проход по массиву найти неповторяющийся элемент
здравствуйте, уважаемые программисты.) у меня такой вопросик: дан массив из нечетного кол-ва элементов, каждый из который встречается в...

Метод для сравнения одного элемента списка с несколькими другими за один проход ?
Допустим есть код, которые сравнивает елемент с индексом 1 списка lines2 с каждым елементом списка lines1: for (int k = 0; k &lt;...

Получить за один проход файл чисел, встречающихся в обоих исходных файлах без повторений
В файлах f и g содержатся вещественные числа, упорядоченные по возраста- нию. Получить за один проход файл чисел, встречающихся в обоих...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru