Форум программистов, компьютерный форум CyberForum.ru

алгоритм - C++

Восстановить пароль Регистрация
 
YusipovIlsur
11 / 11 / 2
Регистрация: 17.12.2010
Сообщений: 52
23.02.2011, 17:53     алгоритм #1
Ребят, помогите разработать алгоритм (а если можно, то саму функцию).
Суть в следующем:
Аргументы функции main задаются строкой (словами через пробел). Необходимо найти символ (его код), который встречается в наибольшем числе слов данной строки. Т.е., если символ несколько раз встречается в одном слове, его не нужно столько же раз считывать - 1 раз в слове и всё.

Вся суть в том, чтобы функция была как можно более компактна.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2011, 17:53     алгоритм
Посмотрите здесь:

C++ Алгоритм
с++ алгоритм C++
C++ c++/алгоритм
алгоритм C++
C++ Алгоритм
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
23.02.2011, 18:14     алгоритм #2
Топорный вариант конечно, но вроде работает

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
char getcode(int argc, char * argv[])
    {
    static char symbs[128];
    static char were_added[128];
 
    for(int i = 1; i < argc; ++i)
        {
        for(int len = strlen(argv[i]),j = 0; j < len; ++j)
            if(were_added[argv[i][j]] == 0)
                {
                ++symbs[argv[i][j]];
                were_added[argv[i][j]] = 1;
                }
        for(int k = 0; k < 128; were_added[k++] = 0);
        }
 
    int maxcode = 0, max_occurence = symbs[0];
    for(int i = 1; i < 128; ++i)
        if(symbs[i] > max_occurence)
            {
            maxcode = i;
            max_occurence = symbs[i];
            }
    return maxcode;
    }
YusipovIlsur
11 / 11 / 2
Регистрация: 17.12.2010
Сообщений: 52
23.02.2011, 19:00  [ТС]     алгоритм #3
спасибо конечно, но не мог бы чуток пояснить свой код, а то я его вкурить не могу
какой у тебя общий принцип?
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
23.02.2011, 19:08     алгоритм #4
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
char getcode(int argc, char * argv[])
    {
    // массив, в котором хранится количество вхождений определенного символа по всем словам
    static char symbs[128];
    // используется в цикле, чтобы следить за тем, чтобы
    // игнорировались все вхождения символа в слове , кроме самого первого
    static char were_added[128];
 
    for(int i = 1; i < argc; ++i)
        {
        // идем по всем аргументам командной строки
        for(int len = strlen(argv[i]),j = 0; j < len; ++j)
            if(were_added[argv[i][j]] == 0)
                { // если раньше символ не встречался в слове
                // увеличиваем количество вхождений для него и делаем пометку 
                // игнорировать последующие вхождения для этого слова
                ++symbs[argv[i][j]];
                were_added[argv[i][j]] = 1;
                }
        // перед тем, как перейти к следующему слову, очищаем пометки для каждого символа
        for(int k = 0; k < 128; were_added[k++] = 0);
        }
 
    // просто ищем максимальный элемент в symbs ( наибольшее число вхождений по строкам )
    // и запоминаем индекс этого элемента ( код символа )
    int maxcode = 0, max_occurence = symbs[0];
    for(int i = 1; i < 128; ++i)
        if(symbs[i] > max_occurence)
            {
            maxcode = i;
            max_occurence = symbs[i];
            }
    return maxcode;
    }
Yandex
Объявления
23.02.2011, 19:08     алгоритм
Ответ Создать тему
Опции темы

Текущее время: 06:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru