Агент секретной службы Смит – начальник отдела по сбору секретных и компрометирующих материалов по западному региону, в котором для хранения информации создан специальныйзакрытый ресурс PiggyLeaks.ru, доступ к которому осуществляется с использованием пароля.Каждому сотруднику отдела выдается свой уникальный пароль доступа к материалам. При генерации паролей агент Смит ввел следующие ограничения:
· пароль состоит из 10 цифр, каждая из которых может принимать значение от 1 до 6 включительно;
· сумма любых трех соседних цифр в пароле равна 10.
Помогите агенту Смиту написать программу по генерации паролей для своих сотрудников. Сколько всего сотрудников у него может работать в отделе?
Представим последовательность цифр в виде: x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10
Рассмотрим первую тройку цифр: x_1 x_2 x_3. Зафиксируем x_1 и x_2. Тогда по условию x_3=10 - x_1 - x_2.
Рассмотрим вторую тройку цифр: x_2 x_3 x_4. x_2 и x_2 подставим из предыдущего шага. Найдем x_4: x_4=10-x_2-x_3=10-x_2-(10-x_1-x_2 )=x_1..
Аналогично x_5: x_5=10-x_3-x_4=10-(10-x_1-x_2)-x_1=x_2.
В итоге получим последовательность вида x_1 x_2 x_3 x_1 x_2 x_3 x_1 x_2 x_3 x_1.
Задача сводится к перебору x_1 и x_2 таких, что 10-x_1-x_2 ≥ 1 и 10-x_1-x_2 ≤ 6.
Это реализуется двумя вложенными циклами от 1 до 6 включительно.
#include
#include
using namespace std;
int main()
{
int i, j, k;
int total = 0;
for (i = 1; i <= 6; i++)
{
for (j = 1; j <= 6; j++)
{
k = 10 - i - j;
if (k <= 6 && k >= 1)
{
cout<
total++;
}
}
}
cout << endl <<" Всего:: "<< total <<"комбинаций"<< endl;
return 0;
}
В результате работы программы переменная total будет содержать количество сотрудников, которые могут работать у Смита и иметь различные пароли.