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

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

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

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

Здравствуйте. Нужна помощь для решения задачи:
Условие: Имея несколько спичек и использовав для изображения цифр соответствующий шаблон, можно получить различные натуральные многоцифровые числа. Какое наименьшее и наибольшее число можно составить из 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 Кб, 30 просмотров)
kim-im вне форума   Ответить с цитированием
Старый 14.02.2018, 15:39   #2
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,548
Репутация: 2082
По умолчанию

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

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

Последний раз редактировалось evg_m; 14.02.2018 в 15:49.
evg_m вне форума   Ответить с цитированием
Старый 14.02.2018, 15:52   #3
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,117
Репутация: 5996
По умолчанию

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

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

Прошелся перебором.
Минут 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, 02:15   #6
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,156
Репутация: 5118
По умолчанию

Цитата:
Сообщение от 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, 10:09   #7
Plague
Забанен
Форумчанин
 
Аватар для Plague
 
Регистрация: 01.11.2006
Адрес: ЯНАО
Сообщений: 416
Репутация: 440
По умолчанию

Ага, не учел один случай в функции преобразования.
Теперь все правильно)
Код:

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 вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




06:17.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
лучший хостинг
Выбираем лучший хостинг: рейтинг ТОП 10
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru