Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2013, 15:13   #1
UaKot
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 36
Вопрос Комбинаторная задача С++ или Pascal

Условие:
Имеется N переключателей, каждый из которых имеет положение 1 или 0,
но некоторые переключатели сломаны, поэтому могут принимать значение только 0 или только 1.

Выведите на экран все возможные варианты выключателей:

Входные данные: Первая строка - число N, далее N строк - режимы работы переключателей.

Пример:
Вход:
3 - Три выключателя
0 1 - имеет положения 0 и 1
0 - только 0
1 - только 1

Выход:
001
101 всего 2 варианта.

Хотя бы намек дайте, пожалуйста...
понимаю Pascal и C++

Последний раз редактировалось UaKot; 06.04.2013 в 15:27.
UaKot вне форума Ответить с цитированием
Старый 06.04.2013, 17:50   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Намек: рекурсия.
s-andriano вне форума Ответить с цитированием
Старый 06.04.2013, 18:27   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
#include <iostream>

using namespace std;

void
generate(int *a, int n, int pos)
{
    if (pos == n) {
        for (int i = 0; i < n; ++i) {
            cout << a[i] <<  " ";
        }
        cout << endl;
        return;
    }
    if (a[pos] == -1) {
        a[pos] = 0;
        generate(a, n, pos + 1);
        a[pos] = 1;
        generate(a, n, pos + 1);
        a[pos] = -1;
    } else {
        generate(a, n, pos + 1);
    }
}

int
main()
{
    int n;
    cin >> n;
    int a[n];
    for (int i = 0; i < n; ++i) {
        int k;
        char c;
        cin >> k;
        cin.get(c);
        if (c == ' ') {
            a[i] = -1;
            cin >> k;
        } else {
            a[i] = k;
        }
    }
    generate(a, n, 0);
    return 0;
}
UPD
Пожалуйста
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 07.04.2013 в 12:45.
BDA на форуме Ответить с цитированием
Старый 07.04.2013, 12:01   #4
UaKot
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 36
По умолчанию

s-andriano, я знаю, что рекурсия.. даже сам пытался сделать что-то, но я с ней не дружу.. мне бы на примерах поучиться.

BDA, спасибо
UaKot вне форума Ответить с цитированием
Старый 07.04.2013, 14:58   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А примеры обычно бывают в учебниках.
На таких примерах учиться не пробовали?
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на зачёт. проблема Задача на нобелевскую премию! Sabotage5 Паскаль, Turbo Pascal, PascalABC.NET 2 18.03.2013 15:18
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51
Комбинаторная задача на Delphi vejlin Помощь студентам 11 04.07.2010 17:33