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

Перебор - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Многопоточность http://www.cyberforum.ru/cpp-beginners/thread336980.html
Как создать 2 функции. Главную и второстепенную. Чтобы в определенный момент из главной в второстепенную было передано число и дальше 2 функции продолжили свою работу одновременно?
C++ Считывание русских символов из файла WinApi У меня есть массив name в котором хранится имя файла в формате D:\... Этот файл с текстом на русском языке. Первое слово - "привет". Потом есть такой код in.open(name); in >> str; Где in - std::ifstream, str - std::string. И после этого в str записывается мусор. Как можно считать русские символы? PS: Проект WinApi http://www.cyberforum.ru/cpp-beginners/thread336977.html
C++ Определение переменной в цикле
Есть скажем такая конструкция. while ( условие ) { int x; int y = 0; } 1) Что здесь будет происходить с переменной "x", она создаться только один раз? Или будет уничтожаться и создаваться каждый раз?
C++ double и for
Здравствуйте, объясните пожалуйста почему в операции: for (double y = .1; y != 1.0; y += .1) получается бесконечный цикл, то есть проскакивает выражение 1.0 == 1.0 - как true ps я знаю что не корректно использоваться не целочисленный "счетчик", но терзает любопытство почему...
C++ Почему не считывает? http://www.cyberforum.ru/cpp-beginners/thread336946.html
Вот код: int range = 3638; double *svchlen = new double ; ifstream fin11("5.txt"); double t; int qwer = 0; while( fin11 >> t ) { svchlen = t;
C++ найти некоторую строку в другой строке, не оканчивающейся \0 мапю текстовый файл в память. нужно в нем найти некоторую строку, как бы это сделать ? Писать свою функцию не хотелось бы. P.S. на си. алгоритмы типо std::search не советуйте подробнее

Показать сообщение отдельно
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
29.07.2011, 12:50     Перебор
deph, пока зделал такое:
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
35
36
37
38
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
/////////////////////////////////////////////////////////////
int length;
std::string s;
std::string result;
std::vector<bool> used;
/////////////////////////////////////////////////////////////
void r(int now)
{
    if(now == length)
    {
        std::cout << result << std::endl;   
        return;
    }
 
    for(int i = 0; i < s.length(); i++)
        if(!used[i])
        {
            used[i] = true;
            result.at(now) = s.at(i);
            r(now+1);
            used[i] = 0;
        }
}
/////////////////////////////////////////////////////////////
int main()
{
    std::cin >> s;
    std::cin >> length;
    result.resize(length, ' ');
    used.resize(s.length(), false);
    r(0);
    
    return 0;   
}
генерирует ВСЕ перестановки тоесть для 4 символов будет 4! вариантов. Не учитывает повторов

Добавлено через 5 минут
Цитата Сообщение от deph Посмотреть сообщение
есть массив. из него нужно получить все возможные варианты строк заданной длинной(пусть будет l),
это тоже делает. количество вариантов будет количество комбинаций из s.length() по length

Добавлено через 33 секунды
Цитата Сообщение от deph Посмотреть сообщение
и кол-во повторений элементов массива в строке не более n(порядок не важен,главное что бы не повторялись более чем n раз)
а это не совсем понял...

Добавлено через 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <map>
#include <string>
#include <vector>
/////////////////////////////////////////////////////////////
int length;
int n;
std::string s;
std::string result;
std::vector<bool> used;
std::map<char, int> repeat;
/////////////////////////////////////////////////////////////
void buildMap()
{
    for(int i = 0; i < s.length(); i++)
        repeat.insert(std::make_pair(s.at(i), 0));  
}
 
void r(int now)
{
    if(now == length)
    {
        std::cout << result << std::endl;   
        return;
    }
 
    for(int i = 0; i < s.length(); i++)
        if(!used[i] && repeat.find(s.at(i))->second < n)
        {
            used[i] = true;
            repeat.find(s.at(i))->second++;
            result.at(now) = s.at(i);
            r(now+1);
            used[i] = 0;
            repeat.find(s.at(i))->second--;
        }
}
/////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Ââåäèòå ñòðîêó:\n";
    std::cin  >> s;
    std::cout << "Ââåäèòå äëèГ*Г*Гі ГЈГҐГ*åðèðóåìîé ïîäñòðîêè:\n";
    std::cin  >> length;
    std::cout << "Ââåäèòå êîëè÷åñòâî ïîâòîðîâ îäèГ*Г*êîâûõ ñèìâîëîâ Гў ñòðîêå:\n";
    std::cin  >> n;
    
    buildMap();
    result.resize(length, ' ');
    used.resize(s.length(), false);
    r(0);
    
    return 0;   
}
 
Текущее время: 19:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru