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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2012, 11:22   #1
*cash*
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 25
По умолчанию Массивы

(подскажите алгоритм решения)

Суперзамок. Секретный замок для сейфа состоит из 10 расположенных в ряд ячеек, в которые надо ввести игральные кубики. Дверь открывается только в том случае, если на любых трёх соседних ячейках сумма точек на передних гранях кубиков равна 10. Нужно написать программу, которая разгадывает код замка, но с учётом того, что первые 2 числа уже заданны(я их рандомом задаю).

Каким образом он должен подбирать и проверять эти числа?
*cash* вне форума Ответить с цитированием
Старый 03.01.2012, 11:27   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
{pascal/delphi}
var a:array[1..10] of byte;
i:integer;
begin
randomize;
repeat
a[1]:=random(6)+1;
a[2]:=random(6)+1;
until ((a[1]+a[2])>=4) and ((a[1]+a[2])<=9);
for i:=3 to 10 do
a[i]:=10-a[i-1]-a[i-2];
writeln;
for i:=1 to 10 do
write(a[i],' ');
end.
Код:
/*C#*/
class Program
	{ 
		public static void Main(string[] args)
		{
			int []a = new int[10];
			do
			{ Random r = new Random();
				a[0] = r.Next(1,6);
				a[1] = r.Next(1,6);
			}			
			while ((a[0]+a[1]<=4)||(a[0]+a[1]>=9));
			for (int i=2;i<10;i++)
			{a[i]=10-a[i-1]-a[i-2];
			}
				for (int i=0;i<10;i++)
				{Console.Write(" {0} ",a[i]);
			}
			Console.ReadKey(true);
		}
	}
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 03.01.2012 в 12:19.
Mad_Cat вне форума Ответить с цитированием
Старый 03.01.2012, 11:32   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Mad_Cat, однозначно зачёт!

я только собрался написать, что не для любых двух первых случайных чисел возможно решениие, как Вы уже написали решение, которое лишено этого недостатка!

Респект!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.01.2012, 15:07   #4
*cash*
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 25
По умолчанию

Случайным образом задаются не только сами числа на кубиках, но и сами эти две ячейки. Они могут быть в любом месте с любым значением.

С++ не нужно, я через паскаль решаю
*cash* вне форума Ответить с цитированием
Старый 03.01.2012, 16:41   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Случайным образом задаются не только сами числа на кубиках, но и сами эти две ячейки. Они могут быть в любом месте с любым значением.
если они могут быть в ЛЮБОМ месте - значит:
1) проверяйте их на допустимость: любые две ячейки замка, индексы которых отличаются меньше, чем на три (на один == соседние, или на два - через одну) должны в сумме aN+AK = S,
где 4<=S <=9 - иначе решения НЕТ

2) если эти две ячейки не расположены рядом - решений может быть БОЛЕЕ чем одно.

Ну и последнее. основой цикл решения Вам уже дан. Допишите код для двух вышеупомянутых ситуаций и вуаля - задача решена!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.01.2012, 19:02   #6
*cash*
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 25
По умолчанию

А почему если сумма ячеек лежит вне от 4 до 9 то решений нет? если сумма равна 10 или 9, понятно что нельзя, ну а 2 и 3 можно же.
Допустим если первые две ячейки 11 или 12 могут быть решения
вот например:
1181181181
1271271271

потом если эти ячейки будут не рядом, а в разных местах, то уже такой вариант решения не подойдет
Код:
for i:=3 to 10 do
a[i]:=10-a[i-1]-a[i-2];

Последний раз редактировалось *cash*; 05.01.2012 в 19:46.
*cash* вне форума Ответить с цитированием
Старый 06.01.2012, 00:23   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А почему если сумма ячеек лежит вне от 4 до 9 то решений нет? если сумма равна 10 или 9, понятно что нельзя, ну а 2 и 3 можно же.
А Вы не забыли, что речь идёт о:
Цитата:
ввести игральные кубики
Вы игральный кубик давно видели? У него всего шесть граней (как, впрочем, у любого куба). И на них точечки, обознающие значения от 1 до 6..


p.s.
Кстати, если сумма близких кубиков лежит в диапазоне от 4 до 9 - то решение есть. Т.е. если сумма равна 9, тогда подходит решение с кубиком с гранью 1...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
С++, Массивы, динамические массивы. -Sunshine- Помощь студентам 1 19.04.2010 02:17
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12