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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите реализовать цикл 
V
    Опции темы
CaLaT
  Дата 30.6.2008, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не хватает мозгу, помогите в реализации 
Допустим есть слово "123", есть степень - 2 и мы должны сформировать все возможные варианты перебора комбинаций длина_слова в степени степень

Пример:

"123" - 2

11
12
13
21
22
23
31
32
33

зы: Возможно следует использовать рекурсию, но с ней я не оч дружу.


Это сообщение отредактировал(а) CaLaT - 30.6.2008, 11:08
PM MAIL   Вверх
SABROG
Дата 30.6.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

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



А как будет выглядить такая комбинация во второй степени "092497756" ?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
CaLaT
Дата 30.6.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Соответственно: 
"092497756" - 2.

00
09
02
04
09
07
07
05
06

90
99
92
94
99
97
97
95
96
...
...
60
69
62
64
69
67
67
65
66

зы: наверное, я не верно выразился, 2-ойка, это не степень - это ограничитель получаемых комбинаций. а кол-во таких комбинаций будет изменяцца по офрмуле - длина_слова в степени органичитель = 9*2 степени = 81 комбинация. 

соответственно:
"092497756" - 3.

000
009
002
004
009
007
007
005
006

090
099
092
094
099
097
097
095
096
...
...
660
669
662
664
669
667
667
665
666
а таких комбинаций будет - 729
PM MAIL   Вверх
rrrFer
Дата 30.6.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

#include <iostream>
#include <string>
int f(std::string s,int n,std::string t,int k){
    n--;
    if(n==0){
        std::cout<<t<<std::endl;
        return 0;
    }
    for(int i=0;i<s.length();i++){
        k++;t+=s[i];
        f(s,n,t,k);
        k--;t.erase(k,1);
    }
}
void main(){
    std::string s;    std::cin>>s;
    int n;            std::cin>>n;
    f(s,n+1,"",0);
    system("pause");
}

PM MAIL WWW ICQ   Вверх
CaLaT
Дата 30.6.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



rrrFer, спс, добрый человек! Отличный код, теперь буду на тебя молицца перед сном! спс
PM MAIL   Вверх
Walker
Дата 30.6.2008, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile Молиться необязательно. Попросите модераторов или любого участника с количеством постов > 100 поставить rrrFer '+' в репутацию. А также - в заголовке темы справа нажмите "Пометить вопрос решённым". Такая благодарность будет значимее!  smile 



--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
bsa
Дата 30.6.2008, 21:24 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(CaLaT @ 30.6.2008,  15:06)
rrrFer, спс, добрый человек! Отличный код, теперь буду на тебя молицца перед сном! спс

Молиться я бы не советовал, так как у программ кроме "работает" есть еще другие критерии оценки. Позволю себе немного переформатировать код, чтобы он выглядел немного правильней, на мой взгляд:
Код
#include <iostream>
#include <string>
#include <cstdlib> //для system

void func(const std::string &s, int n, std::string t, int k) //s в процессе работы не меняется - экономим время на его копирование
{
    if ( n > 1 ){
       for(std::string::const_iterator i = s.begin(), end = s.end(); i != end; ++i) { //используем итераторы вместо индексов - меньше вычислений
           t += *i;
           func(s, n - 1, t, k + 1);  //вычисление n--; ... n++; сведено к вычислению на месте
           t.erase(k, 1);
       }
    } else
           std::cout << t << std::endl;
}

int main() //функция main должна возвращать int
{
    std::string s;
    std::cout << "input s=" << std::flush;
    std::cin >> s;

    unsigned n;
    std::cout << "input n=" << std::flush;
    std::cin >> n;

    func(s, n, "", 0);

    system("pause");
    return 0;
}

PM   Вверх
rrrFer
Дата 30.6.2008, 21:44 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



bsa, 
легко искать недочеты в чужом коде...
PM MAIL WWW ICQ   Вверх
bsa
Дата 30.6.2008, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(rrrFer @ 30.6.2008,  21:44)
bsa, 
легко искать недочеты в чужом коде...

Труднее, чем в своем.  smile 
Кстати, мой пост скорее адресован именно тебе.

Это сообщение отредактировал(а) bsa - 30.6.2008, 23:30
PM   Вверх
SABROG
Дата 1.7.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

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



А так не проще ?

Код

#include <stdio.h>

int main(int argc, char **argv)
{
    char *str = argv[1];
    if (!str) return 1;
    while (*argv[1])
    {
        char a = *argv[1]++;
        char *str2 = str;
        while (*str2)
        {
            printf("%c %c\n", a, *str2++);
        }
    }
    return 0;
}




--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
rrrFer
Дата 1.7.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



SABROG, 
Цитата(CaLaT @  30.6.2008,  07:45 Найти цитируемый пост)
Допустим есть слово "123", есть степень - 2 и мы должны сформировать все возможные варианты перебора комбинаций длина_слова в степени степень

где в вашей программе степень то вводить, и что от нее зависит? она у вас всегда равна 2.
bsa, 
Цитата(bsa @  30.6.2008,  23:28 Найти цитируемый пост)
Кстати, мой пост скорее адресован именно тебе.

а мой-тебе

Это сообщение отредактировал(а) rrrFer - 1.7.2008, 13:44
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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