Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение повторяющихся элементов в массиве, наиболее рациональное решение 
V
    Опции темы
xvr
Дата 1.11.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Firex @  1.11.2010,  17:21 Найти цитируемый пост)
огда только подскажите дальнейшие действия, если на данной стадии я имею: структурированный массив упорядоченный по переменной vmass.tempCount(число повторений переменной), а в vmass.tempVar лежит сама переменная.

Вывести tempVar из начала (или конца - смотря как у вас они упорядоченны)

Цитата(Firex @  30.10.2010,  18:48 Найти цитируемый пост)
о тут возникает проблема... если повторившихся элементов несколько и переменная count у них одинаковая... 

Не имеет значения - вам же нужен 1 максимальный? Вот один и берите.

PM MAIL   Вверх
Firex
Дата 1.11.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 20.10.2010

Репутация: нет
Всего: нет



Решил следующим образом задачу, вдруг кому сгодиться) Программа ищет в массиве число, которое повторяется наибольшее количество раз, если таких чисел несколько, которые имеют равное количество повторений, то выводит их все.
Код


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>

struct buff // структура для записи переменной и количества совпадений
{
    int tempVar;
    int tempCount;
};
int main(int argc, char *argv[])
{
    setlocale (LC_CTYPE,"");
    srand((int)time(NULL));
    int *mass,i=10,j,t,z,MaxCount=0;
    char flag;
    struct buff vmass[i];
    mass=calloc(i,sizeof(int)); // динамический массив
    for(j=0;j<i;j++) // заполняем рандомными числами от -10 до 10
    {
        mass[j]=rand()%20-10;
        vmass[j].tempVar=mass[j]; // заносим массив в структурированный массив
        vmass[j].tempCount=0; // для каждой переменной пока количество совпадений 0
        printf("Элемент массива %d случайное число %d\n",j,mass[j]);
    };
    printf("\n");
    for(j=0;j<i;j++)
    {
        flag='f'; // совпадений нет
        t=0;
        for(z=0;z<i;z++)
        {
            if(mass[j]==mass[z]) // если есть совпадение
            {
                flag='t'; // есть совпадение
                t++; // количество совпадений
            };
        };
        if('t'==flag)
        {
            vmass[j].tempCount=vmass[j].tempCount+t; // записываем в структурированный массив количество совпадений
        };
        printf("vmass[%d].tempCount=%d vmass.tempvar=%d\n",j,vmass[j].tempCount,vmass[j].tempVar);
    };
    printf("\n");
    for(j=0;j<i;j++) // сортируем структурированный массив по переменной Var
    {
        for(z=0;z<i-1;z++)
        {
            if(vmass[z].tempVar<vmass[z+1].tempVar)
            {
                int buff=vmass[z].tempVar;
                vmass[z].tempVar=vmass[z+1].tempVar;
                vmass[z+1].tempVar=buff;
                buff=vmass[z].tempCount;
                vmass[z].tempCount=vmass[z+1].tempCount;
                vmass[z+1].tempCount=buff;
            };
        };
        if(MaxCount<vmass[j].tempCount)
        {
            MaxCount=vmass[j].tempCount;
        };
    };
    z=11;
    flag='t';
    if(MaxCount!=1)
    {
        for(j=0;j<i;j++)
        {
//            printf("vmass[%d].tempVar=%d Count=%d\n",j,vmass[j].tempVar,vmass[j].tempCount);
            if((vmass[j].tempVar!=z)&&(vmass[j].tempCount==MaxCount))
            {
                if('t'==flag)
                {
                    printf("Наибольшее чисило раз(%d) встречается элемент %d\n",MaxCount,vmass[j].tempVar);
                    flag='f';
                }
                else if('f'==flag)
                {
                    printf("Элемент %d имеет такое же количество повторений\n",vmass[j].tempVar);
                };
            };
            z=vmass[j].tempVar;
        
        };
    } else printf("Все элементы встречаются по только одному разу/n");
//    printf("MaxCount=%d\n",MaxCount);
    return 0;
}

Пусть код и убогий(как говорят тут старшие товарищи)... зато рабочий и без использования всякой всячины, которая на первом курсе не прокатывает.
PM MAIL   Вверх
LeD4eG
Дата 1.11.2010, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 29.9.2009
Где: Волгоград

Репутация: 1
Всего: 1



а нельзя ли сделать приблизительно такое (псевдокод):
Код

max_cnt=0;    //максимальное число повторений одного числа
for(i=0;i<size_mass;i++){
    cnt_var=0;      //счётчик для переменной
    for(j=i+1;j<size_mass-1;j++){
            if(a[j]-a[i]==FLT_EPSILON){
                       cnt_var++;   //увеличиваем счётчик этой переменной
                       k =i               //запоминаем индекс повторяющегося числа
              }
             if(cnt_var>max_cnt) max_cnt=cnr_var;
       }
}

ну хотя я  smile 
--------------------
Ты не успел стать для кого-то главным, кому-то очень нужным.....
PM MAIL   Вверх
Леопольд
Дата 2.11.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 3
Всего: 13



Цитата(Firex @  1.11.2010,  20:01 Найти цитируемый пост)
Пусть код и убогий(как говорят тут старшие товарищи)... зато рабочий и без использования всякой всячины, которая на первом курсе не прокатывает. 
Когда пишешь что-то, надо разбить это что-то на элементарные подзадачи, и оперировать уже ими. Т.е. Заполнил массив - одна функция, отсортировал  - другая, нашёл максимальный элемент(ы) - третья, вывел результат - четвёртая. Потом в main выполнил их по очереди. У тебя же, всё в кучу намешанно, поэтому сложно читать.



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Firex
Дата 3.11.2010, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 20.10.2010

Репутация: нет
Всего: нет



Леопольд, спасибо, буду это в последующем учитывать. Как то просто не задумывался над этим.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0745 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.