Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 14.02.2018, 11:34   #1
kim-im
Пользователь
 
Регистрация: 07.11.2017
Сообщений: 42
По умолчанию Числа из спичек

Здравствуйте. Нужна помощь для решения задачи:
Условие: Имея несколько спичек и использовав для изображения цифр соответствующий шаблон, можно получить различные натуральные многоцифровые числа. Какое наименьшее и наибольшее число можно составить из K спичек, используя их все?

Входные данные: Натуральное число K – количество спичек (2 ≤ K ≤ 200)

Исходные данные: Ответ к задаче (два числа через пробел).

Пример: k=5 => min=2, max=71

При решении я составил составил небольшую таблицу, чтобы найти закономерность (могу ошибаться):
k=2 => min=1, max=1
k=2 => min=7, max=7
k=4 => min=4, max=11
k=5 => min=2, max=71
k=6 => min=0, max=111
k=7 => min=8, max=711
k=8 => min=10, max=1111
k=9 => min=18, max=7111
k=10 => min=22, max=11111

Для max у меня получилось.
Прошу помощи составить программу для нахождения min.
Спасибо.
Мой код:
Код:
var k,max:int64;
 begin
  read (k);
  if not odd(k) then max:=1 else max:=7;
   while k>3 do
    begin
     max:=max*10+1;
     k:=k-2;
    end;
   write (max);
 end.
Шаблон для задачи ниже
Изображения
Тип файла: jpg 21c259fae3af3b9b01444800c37c908d.jpg (6.3 Кб, 69 просмотров)
kim-im вне форума Ответить с цитированием
Старый 14.02.2018, 14:39   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,052
По умолчанию

получаем минимально возможную разрядность числа (используя спички по максимуму для младших разрядов)
x:=n div 7;
?8...8 (8 повторено X раз)
может статься невозможно получить первую цифру (к примеру n mod 7 =1)
?8(первые две цифры) иногда (или часто) можно заменить на ДРУГОЕ меньшее но тоже двузначное число(но с тем же числом спичек).

и еще остался случай (n mod 7 =0) т.е. первая цифра отсутствует( число вида 88...8)
что-то нужно( а может и не нужно) делать и с этим.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.02.2018 в 14:49.
evg_m вне форума Ответить с цитированием
Старый 14.02.2018, 14:52   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

Цитата:
получаем минимально возможную разрядность числа (используя спички по максимуму для младших разрядов)
Не очень катит. Например для 10: по максимуму 78, а минимум 22
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2018, 15:14   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,052
По умолчанию

Цитата:
Не очень катит. Например для 10: по максимуму 78, а минимум 22
а для двузначных примеров есть замечание.
Цитата:
(первые две цифры) иногда (или часто) можно заменить на ДРУГОЕ меньшее но тоже двузначное число(но с тем же числом спичек).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 16.02.2018, 21:54   #5
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 419
По умолчанию

Прошелся перебором.
Минут 15 до 200 перебирал мой комп.
Код:
2 1 
3 7 
4 4 
5 2 
6 0 
7 8 
8 10 
9 18 
10 22 
11 20 
12 28 
13 68 
14 88 
15 168 
16 188 
17 228 
18 268 
19 288 
20 688 
21 888 
22 1688 
23 1888 
24 2288 
25 2688 
26 2888 
27 6888 
28 8888 
29 16888
30 18888 
31 22888 
32 26888 
33 28888 
34 68888 
35 88888 
36 168888 
37 188888 
38 228888 
39 268888 
40 288888 
41 688888 
42 888888 
43 1688888
С 15 начинаем замечать закономерность?
И при нахождении максимума ответ у Вас явно в int64 не поместится.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 17.02.2018, 01:15   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Сообщение от Plague Посмотреть сообщение
Прошелся перебором.
не соглашусь.

сравните:
Код:
 2 1
 3 7
 4 4
 5 2
 6 6
 7 8
 8 10
 9 18
 10 22
 11 20
 12 28
 13 68
 14 88
 15 108
 16 188
 17 200
 18 208
 19 288
 20 688
 21 888
 22 1088
 23 1888
 24 2008
 25 2088
 26 2888
 27 6888
 28 8888
 29 10888
 30 18888
 31 20088
 32 20888
 33 28888
 34 68888
 35 88888
 36 108888
 37 188888
 38 200888
 39 208888
 40 288888
 41 688888
 42 888888
 43 1088888
 44 1888888
 45 2008888
 46 2088888
 47 2888888
 48 6888888
 49 8888888
 50 10888888
в интернете нашёл такой вариант решения:
Код:
public static string Solve3(int n)
		{
			if (n < 2) return null;
			if (n < 8) {
				switch (n)
				{
						case 2: return "1";
						case 3: return "7";
						case 4: return "4";
						case 5: return "2";
						case 6: return "6";
						case 7: return "8";
						default: return "";
				}
			}
			else {
				if (n==10) return "22"; // чтобы не париться с исключением и отрицательным d
				int d = n / 7;
				int r = n % 7;
				if ((r == 1) || (r == 4)) d -= 1; 
				else if (r == 3) d -= 2;
					
				string tail = new string('8', d);
				switch (r)
				{
						case 1: return "10" + tail;
						case 2: return "1" + tail;
						case 3: return "200" + tail;
						case 4: return "20" + tail;
						case 5: return "2" + tail;
						case 6: return "6" + tail;
						default: return tail;
				}
			}
		}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.02.2018, 09:09   #7
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 419
По умолчанию

Ага, не учел один случай в функции преобразования.
Теперь все правильно)
Код:
function p(a: array of integer): BigInteger;
var
  s := '';
  d := Arr('1', '7', '4', '2', '0', '8');
begin
  foreach var c in a do
    s += d[c - 2];
  if s[1]='0' then s[1]:='6';
  Result := s.ToBigInteger;
end;
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра 100 спичек shaman7991 Помощь студентам 1 19.11.2016 19:55
Задачи в ТурбоПаскаль: найти числа Армстронга и просуммировать числа в последовательности номера которых простые числа Lena1808 Помощь студентам 1 17.05.2012 07:00
Игра "100 спичек" NickLid C# (си шарп) 5 18.10.2011 21:14
игра 100 спичек Чуччи Паскаль, Turbo Pascal, PascalABC.NET 4 13.01.2011 11:03
игра 100 спичек Igorek0886 Паскаль, Turbo Pascal, PascalABC.NET 4 14.04.2009 18:18


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS