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

Комбинаторика, количество анаграмм - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Реализация алгоритма Рабина-Карпа для двусвязного линейного списка http://www.cyberforum.ru/cpp-beginners/thread643918.html
Собственно, вопрос в заголовке - будут ли какие-нибудь существенные отличия в реализации алгоритма от, например, данного кода, где реализован обычный алгоритм по поиску подстроки в строке: #include <stdio.h> #include <conio.h> #include <string.h> #include <math.h> long hash(char* str, int base, int pos, int len) { long result = 0; int r = len-1; for (int i = pos; i < i + len &&...
C++ Ошибка в коде Подскажите что не так? Пишет ошибку в файле graf.cpp: 106 H:\lab2graf2\graf.cpp invalid types `double' for array subscript 108 H:\lab2graf2\graf.cpp invalid types `double' for array subscript 114 H:\lab2graf2\graf.cpp invalid types `double' for array subscript придирается к матрице. Ещё ужасно бесит warning: 3 C:\Dev-Cpp\include\c++\3.4.2\backward\list.h:59, from graf.h In... http://www.cyberforum.ru/cpp-beginners/thread643905.html
Ошибки линковщика C++
Люди добрые, подскажите, как быть или дайте ссылку на статью о том, как работает линковщик.. Есть один главный хэдер, подключащий всё : #ifndef __CHATSERVER_H_ #define __CHATSERVER_H_ #include "resource.h" #include "Defines.h"
C++ Создание функции инициализации двумерного массива строк через указатель
Здравствуйте,имеется двумерный массив: in_data_up=_T("00"); in_data_up=_T("01"); in_data_up=_T("02");in_data_up=_T("03");in_data_up=_T("04"); in_data_up=_T("10"); in_data_up=_T("11"); in_data_up=_T("12"); in_data_up=_T("13"); in_data_up=_T("20");in_data_up=_T("21"); in_data_up=_T("22"); in_data_up=_T("23"); необходимо создать функцию,которая...
C++ Как использовать fmod http://www.cyberforum.ru/cpp-beginners/thread643859.html
Я занимаюсь программированием музыкального проигрывателя, и мне нужно как-то воспроизводить музыку! Мне здесь же посоветовали fmod, которым я ни не умею пользоваться ни устанавливается. Нужна помощь!!:cry::umnik:
C++ Для чего подключаются sys/stat.h? для чего мы его подключаем? подробнее

Показать сообщение отдельно
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
29.08.2012, 12:58     Комбинаторика, количество анаграмм
По-быстрому закодил и проверил на ******** - прошло все тесты.

Версия с файлами
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
#include <fstream>
#include <string>
 
_int64 fact (int n)
{
    if (n==0 || n==1) 
        return 1;
    return fact(n-1)*n;
}
 
std::ifstream ifs ("input.txt");
std::ofstream ofs ("output.txt");
 
int main()
{
    std:: string s;
    ifs >> s;
    int mas[27] = {0};
 
    for (int i=0; i<s.length(); ++i)
        mas[s[i] - 'a']++;
 
    _int64 tmp = fact (s.length());
    for (int i=0; i<27; ++i)
        tmp /= fact(mas[i]);
    ofs << tmp;
    return 0;
}


Версия без файлов
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
#include <iostream>
#include <string>
 
_int64 fact (int n)
{
    if (n==0 || n==1) 
        return 1;
    return fact(n-1)*n;
}
 
int main()
{
    std:: string s;
    std::cin >> s;
    int mas[27] = {0};
 
    for (int i=0; i<s.length(); ++i)
        mas[s[i] - 'a']++;
 
    _int64 tmp = fact (s.length());
    for (int i=0; i<27; ++i)
        tmp /= fact(mas[i]);
    std::cout << tmp;
    system ("pause");
    return 0;
}


Я просто завел массив, в котором mas[i] показывает, сколько раз встречалась в строке буква, позиция которой в алфавите i. Считал я это, проверяя каждый символ строки и увеличивал кол-во таких символов.

P.S. если во входной строке заглавные буквы, то вместо mas[s[i] - 'a']++; напишите mas[s[i] - 'A']++;
 
Текущее время: 15:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru