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

Определить количество комбинаций разноцветных полосок, расположенных по определенной схеме - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Член класса управляемый не может относиться к типу класса не управляемый http://www.cyberforum.ru/cpp-beginners/thread1223284.html
"член класса управляемый не может относиться к типу класса не управляемый" Не могу понять что делать с этой ошибкой и как исправить
C++ Как расшифровывается библиотека cstdlib? ... http://www.cyberforum.ru/cpp-beginners/thread1223268.html
Что применить "\n" или "endl"? C++
Эти две операции похожи - они переходят на новую строку. Но endl очищает буфер, но при этом дольше выполняется. Так что же лучше применять?
C++ Позиционирование в потоке, переставить все нулевые элементы в начало файла
создать функцию, которая с использованием функций позиционирования в потоке переставляет все нулевые элементы в начало файла содержащего файла, переданного ей???????????
C++ Как считается угол альфа http://www.cyberforum.ru/cpp-beginners/thread1223238.html
#include<iostream> #include<cmath> using namespace std; int main() { setlocale(0,""); double alpha,V,L,k; const double g=9.8; cout<<"Введите угол:\n"; cin>>alpha;
C++ Проблема с указателем на функцию Доброго времени суток, пишу приложение, которое реализует все функции АТД (двусвязный список). Есть стандартная библиотека, есть функция в этой библиотеке int DLWalk(DLLIST *List, ... подробнее

Показать сообщение отдельно
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214

Определить количество комбинаций разноцветных полосок, расположенных по определенной схеме - C++

06.07.2014, 13:33. Просмотров 2488. Ответов 29
Метки (Все метки)

Задание:
В День флага России владелец магазина решил украсить свою витрину полосками ткани белого, синего и красного цветов. Он хочет, чтобы выполнялись следующие условия:
  1. Полоски одного цвета не должны располагаться рядом друг с другом.
  2. Синяя полоска может быть расположена только между белой и красной или между красной и белой.

Определите количество способов выполнить желание владельца магазина.

Исходные данные:
N — количество полосок, 1 ≤ N ≤ 45.
Результат:
M — количество способов украсить витрину.
http://acm.timus.ru/problem.aspx?space=1&num=1225

Я подумала, что у нас есть 2 изначальных варианта (б - белый, к - красный): бкбкбк... и кбкбкб... И уже в эти варианты мы вставляем синий между белым и красным - сначала один синий во всю цепочку, потом 2 синих и т.д., т.е. у нас есть сочетания по 1, по 2 и т.д. из 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
#include <iostream>
using std::cin;
using std::cout;
 
#define I unsigned __int64
 
I C(int n, int k)
{
    I res = 1;
    for (int i = 1; i <= k; i++)
        res *= n - k + i;
    for (int i = 1; i <= k; i++)
        res /= i; // делим отдельно, чтобы точно не должно было возникнуть дробных чисел
    return res;
}
 
int main()
{
    int n;
    cin >> n;
    I res = 0;
    for (int i = 0; i <= n-2; i++)
        res += C(n-2, i);
    cout << 2*res; // два варианта цепочки
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru