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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что нужно подтянуть? 
:(
    Опции темы
ArniLand
Дата 20.6.2011, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



За два курса в университете понял, что я ни черта не умею программировать. Сейчас хочу решить эту проблему. Для думаю нужно выяснить, что мне нужно повторить. Алгоритмическое мышление хромает и знания языка хромают. Вот выкладываю задачку которую пытался решить. Условие задачи: Найти количество различных элементов в массиве. Задачки решена не правильно, но пока я не могу понять как решить. С помощью этой задачи хочу выявить свои пробелы и получить рекомендации как их устранить. Заранее благодарен. 

Код

#include <iostream>

using namespace std;

int main()

{
       const int size = 10;

        int arr[size] = {10, 1, 1, 3, 1, 3, 1, 8, 9, 2};

        int count = 0;
        for (int i = 0; i < size; ++i)

        {

                for(int j = size-1; j > i; --j)

                {

                        if (arr[i] != arr[j])

                        {

                                count++;

                            break;

                        }

                        else

                                --j;
                }

        }



        cout << count <<endl;

        return 0;
}


Это сообщение отредактировал(а) ArniLand - 20.6.2011, 21:57
PM MAIL   Вверх
triclosan
Дата 20.6.2011, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ArniLand @  20.6.2011,  21:36 Найти цитируемый пост)
Вот выкладываю задачку

так а где?
PM MAIL   Вверх
ArniLand
Дата 20.6.2011, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Извините, исправил первый пост.
PM MAIL   Вверх
fish9370
Дата 20.6.2011, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



эта задачка интереснее решается с помощью хеш-таблицы.. привожу самый приметивный пример:

Код


int arr[size] = {10, 1, 1, 3, 1, 3, 1, 8, 9, 2}; 
int *arr_res = NULL;

int max = get_max(arr); /* max = 10, максимальный элемент массива */

if (!(arr_res = calloc(sizeof(*arr_res), max + 1)) { /* просто выделение памяти для нового массива */
          printf("%s\n", "no memory");
          exit(1);
}

int i;
for (i = 0; i < size; ++i) {
          arr_res[arr[i]]++; /* вот тут та самая фишка */
}

free(arr_res);



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

сорри что оффтоп и на Си.. 

Это сообщение отредактировал(а) fish9370 - 20.6.2011, 22:05


--------------------
undefined
PM MAIL WWW ICQ   Вверх
triclosan
Дата 20.6.2011, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <iterator>

int main() 
{ 
    const int size = 10;
    int arr[size] = {10, 1, 1, 3, 1, 3, 1, 8, 9, 2};
    std::vector<int> v(arr, arr+10);
    std::sort( v.begin(), v.end() );
    std::vector<int>::iterator end = std::unique( v.begin(), v.end() );
    std::copy( v.begin(), end, std::ostream_iterator<int>(std::cout, " ") );
} 


Это сообщение отредактировал(а) triclosan - 20.6.2011, 22:26
PM MAIL   Вверх
500mhz
Дата 20.6.2011, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



fish9370
старо))) может памяти не хватить


--------------------

PM MAIL ICQ   Вверх
fish9370
Дата 20.6.2011, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(500mhz @  20.6.2011,  22:54 Найти цитируемый пост)
может памяти не хватить


я же говорю, что нужно хеш улучшить.. сделать перемешаную таблицу..  smile 

пример учебный.. зато как изящно..

Это сообщение отредактировал(а) fish9370 - 20.6.2011, 22:57


--------------------
undefined
PM MAIL WWW ICQ   Вверх
500mhz
Дата 20.6.2011, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



fish9370 
при чем тут определение "хеш"? 


--------------------

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


Опытный
**


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

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



Цитата(500mhz @  20.6.2011,  22:58 Найти цитируемый пост)
при чем тут определение "хеш"? 


набери в google: таблица с вычисляемым входом


--------------------
undefined
PM MAIL WWW ICQ   Вверх
500mhz
Дата 20.6.2011, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



Код

inc dword [esi+ebp]

вот это изящно , где esi= начала массива arr_res, ebp = элемент массива arr
но это нифига не хеш ))) 


--------------------

PM MAIL ICQ   Вверх
Qu1nt
Дата 20.6.2011, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

#include <list>
#include <iostream>
#include <iterator>

int main()
{
    int data[] = {1, 2, 3, 3, 2, 1};
    std::list<int> list(data, data + sizeof(data) / sizeof(int));
    list.sort();
    list.unique();
    std::copy(list.begin(), list.end(), std::ostream_iterator<int>(std::cout, " "));
}

PM MAIL   Вверх
fish9370
Дата 20.6.2011, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



500mhz, ты тему читал? я уже и извинился за оффтоп.. и рассказал как нужно сделать.. что нужно доработать прогу и использовать перемешаную таблицу - специально для тебя писал..

а ты приводишь код на асме? мужик, че ты там куришь?  smile 


--------------------
undefined
PM MAIL WWW ICQ   Вверх
500mhz
Дата 20.6.2011, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



fish9370
 какая разница на чем код ? ))) тут главное алгоритм )))


--------------------

PM MAIL ICQ   Вверх
fish9370
Дата 20.6.2011, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(500mhz @  20.6.2011,  23:38 Найти цитируемый пост)
какая разница на чем код ? ))) тут главное алгоритм )))


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

как поведет себя твой алгоритм при больших числах? сколько памяти понадобится?


--------------------
undefined
PM MAIL WWW ICQ   Вверх
500mhz
Дата 20.6.2011, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



4 gb в худшем варианте )))


--------------------

PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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