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

Изменение массива с повторами

02.11.2013, 02:31. Показов 1065. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Скажите, пожалуйста, как решить такую задачу
есть массив с элементами,например, {4,7,9,4}
нужно сделать новый массив с индексами, но если элементы повторяются, то нужно брать наименьший индекс, то есть для
{4,7,9,4} ответ будет {0,1,2,0}


для {5,5,5,6} ответ будет {0,0,0,1}
для {5,6,5,6} ответ будет {0,1,0,1}
для {7,8,9,2} ответ будет {0,1,2,3}

я пытаюсь сделать через цикл в цикле, но, когда повторяющиеся элементы далеко друг от друга, у меня ничего не получается
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.11.2013, 02:31
Ответы с готовыми решениями:

Борьба с повторами
Помогите пожалуйста со следующим, есть БД на Access для учета корреспонденции, в ней есть таблицы за каждый год (Регистрация...

Проблемы с повторами
Здравствуйте у меня есть столбец "A" со значениями вот такого примера: раз два три три два раз два три раз раз два три четыре ...

Нумерация ячеек с повторами
помогите написать формулу для нумерации строк например 1 1 1 1 1 2 2 2

18
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
02.11.2013, 09:41
почему во второй строке 0 1 0 1 ?
Уточните формулировку
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
02.11.2013, 09:46
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int mass[10]={3,2,3,4,5,6,7,8,5,3};
int value[10]={0,0,0,0,0,0,0,0,0,0};
int i,j,present,lastvalue;
lastvalue=0;
for(i=0;i<10;i++)
{
    present=0;
    for(j=0;j<lastvalue;j++)
    {
           if(mass[i]==value[j])
           {
                present=1;break;
           }
    }
    if(!present)
    {
         value[lastvalue++]=mass[i];
         j=lastvalue-1;
    }
    mass[i]=j;
}
Замечание: Предполагаем, что в исходном массиве нуль не встречается.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.11.2013, 09:46
Цитата Сообщение от vua72 Посмотреть сообщение
почему во второй строке 0 1 0 1 ?
Потому что наименьшие индексы для {5,6,5,6} это {0,1,0,1}
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
02.11.2013, 11:12

Не по теме:

zss, вы не так поняли задание. Требуется выводить не количество повторений числа, а индекс первого вхождения.



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
33
34
#include <stdio.h>
 
#define N 10
 
int main()
{
    int first[N] = {3, 2, 3, 4, 5, 6, 7, 8, 5, 3};
    int second[N] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
    int i, j;
 
    for (i = 0; i < N; ++i)
    {
        if (second[i] == -1)
        {
            second[i] = i;
 
            for (j = i + 1; j < N; ++j)
            {
                if (first[i] == first[j])
                {
                    second[j] = i;
                }
            }
        }
    }
 
    for (i = 0; i < N; ++i)
    {
        printf("%d ", second[i]);
    }
    printf("\n");
 
    return 0;
}

Результат на codepad.org
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
02.11.2013, 11:27
могу предложить тупое но наглядное решения
arrValue[] массив значений
arrIndex[] массив индексов который нужно сформировать изначально во всем массиве -1

C++
1
2
3
4
5
6
7
8
9
10
11
12
for(int i=0;i<n;i++)
 {
   if(arrValue[i]<0)
     {
       for(int j=i;j<n;j++)
        {
           if(ArrValue[i]==ArrValue[j])
               arrIndex[j]=i;
 
        }
    }
 }
1
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
02.11.2013, 11:40
Цитата Сообщение от anmartex Посмотреть сообщение
не количество повторений числа, а индекс первого вхождения
А у меня разве не так.
Для данного примера выводится
0 1 0 2 3 4 5 6 3 0
1
1 / 1 / 2
Регистрация: 29.09.2012
Сообщений: 59
02.11.2013, 11:42  [ТС]
ValeryS, ваша программа не будет работать, если в массиве не будет повторений, нет? (будут -1)

Спасибо большое всем, сейчас посмотрю остальные решения
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.11.2013, 11:42
Цитата Сообщение от zss Посмотреть сообщение
А у меня разве не так.
Должно начинаться как минимум так: 0, 1, 0, 3 ...
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
02.11.2013, 11:46
EfimenkoFedor,
Какой ответ Вы считаете правильным?
1
1 / 1 / 2
Регистрация: 29.09.2012
Сообщений: 59
02.11.2013, 11:51  [ТС]
anmartex, спасибо большое, но у вас не выводит цифру 2, даже в вашем примере
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
02.11.2013, 11:51
Цитата Сообщение от ValeryS Посмотреть сообщение
if(arrValue[i]<0)
вот здесь накосячил не тот массив написал
нужно
C++
1
if(arrIndex[i]<0)
Цитата Сообщение от EfimenkoFedor Посмотреть сообщение
ValeryS, ваша программа не будет работать, если в массиве не будет повторений, нет?
будет
смотрим по шагам
C++
1
2
3
4
5
6
7
8
9
10
11
for(int i=0;i<n;i++)
{ // ну это понятно  
  if(arrIndex[i]<0)  // если меньше 0 значит еще никто не трогал обрабатываем  
    { // пошла обработка
     for(int j=i;j<n;j++) //цикл от текушего до конца массива
       {
            if(ArrValue[i]==ArrValue[j]) // если равны значения, а на первой итерации они равны j==i
               arrIndex[j]=i;   //то запишем индекс,
       }
   }
 }
1
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
02.11.2013, 11:54
Цитата Сообщение от EfimenkoFedor Посмотреть сообщение
anmartex, спасибо большое, но у вас не выводит цифру 2, даже в вашем примере
Да, я тоже не верно понял задание. Я индексы там использовал

Добавлено через 1 минуту
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
33
34
35
36
37
#include <stdio.h>
 
#define N 10
 
int main()
{
    int first[N] = {3, 2, 3, 4, 5, 6, 7, 8, 5, 3};
    int second[N] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
    int id = 0;
    int i, j;
 
    for (i = 0; i < N; ++i)
    {
        if (second[i] == -1)
        {
            second[i] = id;
 
            for (j = i + 1; j < N; ++j)
            {
                if (first[i] == first[j])
                {
                    second[j] = id;
                }
            }
 
            id++;
        }
    }
 
    for (i = 0; i < N; ++i)
    {
        printf("%d ", second[i]);
    }
    printf("\n");
 
    return 0;
}
1
1 / 1 / 2
Регистрация: 29.09.2012
Сообщений: 59
02.11.2013, 12:02  [ТС]
zss, спасибо огромное, ваша программа у меня сработала верно
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
02.11.2013, 12:05
Цитата Сообщение от EfimenkoFedor Посмотреть сообщение
anmartex, спасибо большое, но у вас не выводит цифру 2, даже в вашем примере
а что должна???
Цитата Сообщение от anmartex Посмотреть сообщение
int first[N] = {3, 2, 3, 4, 5, 6, 7, 8, 5, 3};
второй индекс занят 3, а она встречается в нулевом индексе
значит 2 здесь не будет, а также и 9 и 8
0
1 / 1 / 2
Регистрация: 29.09.2012
Сообщений: 59
02.11.2013, 12:15  [ТС]
Вы, видимо, не поняли задание)

для {3, 2, 3, 4, 5, 6, 7, 8, 5, 3}
ответ должен быть {0, 1, 0, 2, 3, 4, 5, 6, 3, 0}
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.11.2013, 12:16
EfimenkoFedor, у тебя задание не соответствует примерам. В задании сказано что должны быть индексы, а по факту порядковые номера.
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
02.11.2013, 12:22
Цитата Сообщение от EfimenkoFedor Посмотреть сообщение
для {3, 2, 3, 4, 5, 6, 7, 8, 5, 3}
ответ должен быть {0, 1, 0, 2, 3, 4, 5, 6, 3, 0}
как это стыкуется с этим
Цитата Сообщение от EfimenkoFedor Посмотреть сообщение
нужно сделать новый массив с индексами, но если элементы повторяются, то нужно брать наименьший индекс,
у четверки индекс 3 а уж никак не 2
1
1 / 1 / 2
Регистрация: 29.09.2012
Сообщений: 59
02.11.2013, 12:26  [ТС]
извините, кажется, я действительно неправильно сформулировал свой вопрос
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.11.2013, 12:26
Помогаю со студенческими работами здесь

Размещение с повторами, грубый перебор
Работаю над работой по Защите информации. Суть программы - грубый подбор введенных в Edit1 данных и вывод их в Edit2 (для того чтобы...

Помогите разобраться с повторами в таблице
Объясните пожалуйста! Собираю очень большую базу данных организаций (более 100тыс.) Как проверить по названию организации нет ли подобной...

Подпрограммы: подсчет числа перестановок с повторами
помогите пожалуйста в делфи 7 написать программу с использованием подпрограмм

МФУ Samsung SCX-4200 печтает с повторами, шаг 75,5 мм
Здравствуйте, подскажите пожалуйста, купил новый оригинальный картридж с рук, Samsung SCX-4200A, возможно он валялся черт знает где 10 лет,...

Изменение структуры массива объектов (изменение ключей)
Помогите пожалуйста, плохо разбираюсь в массивах объектов:( Имеется массив объектов (координат), как можно изменить его структуру(ключи),...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru