Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Реализация алгоритма Рабина-Карпа для двусвязного линейного списка http://www.cyberforum.ru/cpp-beginners/thread643918.html
Собственно, вопрос в заголовке - будут ли какие-нибудь существенные отличия в реализации алгоритма от, например, данного кода, где реализован обычный алгоритм по поиску подстроки в строке: #include...
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... http://www.cyberforum.ru/cpp-beginners/thread643905.html
Ошибки линковщика C++
Люди добрые, подскажите, как быть или дайте ссылку на статью о том, как работает линковщик.. Есть один главный хэдер, подключащий всё : #ifndef __CHATSERVER_H_ #define __CHATSERVER_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"); ...
C++ Как использовать fmod http://www.cyberforum.ru/cpp-beginners/thread643859.html
Я занимаюсь программированием музыкального проигрывателя, и мне нужно как-то воспроизводить музыку! Мне здесь же посоветовали fmod, которым я ни не умею пользоваться ни устанавливается. Нужна...
C++ Для чего подключаются sys/stat.h? для чего мы его подключаем? подробнее

Показать сообщение отдельно
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 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']++;
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.