IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Помогите решить задачу. Индикатор
ForesTop
сообщение 5.11.2010 12:10
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Влад

Репутация: -  0  +


Помогите решить задачу.

Задача Индикатор.

Лимит времени 2000/4000/4000/4000 мс. Лимит памяти 65000/65000/65000/65000 Кб.

Недавно Вася приобрёл калькулятор с жидкокристаллическим индикатором. Этот индикатор отображает N цифр с помощью N одинаковых элементов.

Отметим, что каждый элемент содержит семь полосок, каждая из которых может быть либо белой, либо чёрной. В частности при отображении цифры "1" чёрными являются две полоски.
Вася - очень любознательный мальчик, поэтому он хочет узнать, какое максимальное и минимальное N-значные числа могут быть отображены на индикаторе его нового калькулятора так, чтобы черными были ровно k полосок.
Напишите программу, которая найдёт ответ на Васин вопрос. Учитывайте при этом, что числа не могут содержать ведущие нули.

Входные данные:
два целых числа: N и k (1<=N<=100, 1<=k<=700).

Выходные данные:
В первой строке - минимальное число, во второй строке - максимальное число.
Если указанным образом не может быть представлено ни одно число, выходной файл должен содержать одну строку NO SOLUTION.

Пример 1.

на входе:
5 15

на выходе:
10117
97111

Пример 2.

на входе:
10 1

на выходе:
NO SOLUTION


Мой вариант решения (не работает):


Program New;
uses crt;
var number: array[1..200000000]of LongInt;
a: array[0..9]of Integer;
n, sum, k, i, c, g, j: Integer;
s: String;
z, l, d: Boolean;
p, save, copy: LongInt;
f: Text;
begin
clrscr;
assign(f, 'input.txt');
reset(f);
read(f, n, k);

a[0]:=6; a[1]:=2; a[2]:=5; a[3]:=5; a[4]:=4; a[5]:=5; a[6]:=6; a[7]:=3;
a[8]:=7; a[9]:=6;

if (n > k) or (k < n*2) then
write('NO SOLUTION')
else
begin
l:=false;
p:=1;
for i:=1 to n-1 do
p:=p*10;
copy:=p;
save:=0;
for i:=1 to n do
begin
save:=save+(copy*9);
copy:=copy div 10;
end;
str(p, s);
j:=0; l:=false; z:=false; d:=false;
repeat
sum:=0;
if d=true then
s:=s+'1'
else
begin
if l=true then
begin
l:=false;
z:=true;
p:=save;
end;
for i:=1 to n do
begin
val(s[i], g, c);
sum:=sum+a[g];
end;
if sum = k then
begin
if z<>true then
l:=true
else
d:=true;
j:=j+1;
number[j]:=p;
end;
if z=true then
p:=p-1
else
p:=p+1;
str(p, s);
end;
until length(s) > n;
writeln(number[1]);
write(number[2]);
end;

readln;
end.




Моя программа очень долго выполняется и выдаёт ошибки. Помогите пожалуйста разобраться!

Сообщение отредактировано: ForesTop - 5.11.2010 15:32
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
ForesTop
сообщение 5.11.2010 21:20
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Влад

Репутация: -  0  +


Попробовал получить максимальное число методом перебора:

const a: array [0 .. 9] of integer = (6, 2, 5, 5, 4, 5, 6, 3, 7, 6);
var
n, k, i, j, n2, l: Integer;
s, c: String;
begin
ReadLn(n, k);
j := k;

if k < n * 2 then
WriteLn('NO SOLUTION')
else begin

SetLength(s, n);
for i := 1 to n do
s[i] := '1';

k := k - (n * 2);

i := 2;
while (i <= n) and (k >= 4) do begin
s[i] := '0';
k := k - 4;
end;

i := n;
while (i >= 0) and (k > 0) do begin
case s[i] of
'1': if k = 1 then begin
s[i] := '7';
k := 0;
end else if k = 2 then begin
s[i] := '4';
k := 0;
end else if k = 3 then begin
s[i] := '2';
k := 0;
end else if k = 4 then begin
s[i] := '6';
k:=0;
end else begin
s[i] := '8';
k := k - 5;
end;

'0': begin
s[i] := '8';
k := k - 1;
end;
end;
i := i - 1;
end;

if k <> 0 then
writeln('NO SOLUTION')
else begin
writeln(s);

k := j; s := ''; n2 := n;

for i := 1 to n do
for j := 9 downto 1 do begin
l := k - a[j];
if (2*(n2-1) <= l) and (l <= 7*(n2-1)) then begin
str(j, c);
s := s + c;
k := k - a[j];
n2 := n2 - 1;
break;
end;
end;

writeln(s);
end;

end;

readln;
end.

Программа перебирает все возможные цифры для числа, да так чтобы их ещё хватало. Короче я не много продумал этот момент, но всё равно врёт, работает, но неправильно.
Совет дайте дельный, не надо комменты типа "думай ещё", уже и так всё перевыдумал, я школьник, научите, может чего не знаю ещё, учитель информатики мало объясняет, мне его объяснений не достаточно, что бы решать задания такого уровня до всего приходиться доходить самому, а в книжках большинство невнятный бред. Если есть очевидные ошибки, укажите что не так.
Короче Help!

Сообщение отредактировано: ForesTop - 6.11.2010 0:12
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
ForesTop   Помогите решить задачу. Индикатор   5.11.2010 12:10
Archon   Ты предлагаешь нам увлекательную игру "попроб...   5.11.2010 15:48
ForesTop   Сначала я забиваю в массив кол-во чёрных палок для...   5.11.2010 16:02
TarasBer   > Сначала я забиваю в массив кол-во чёрных пало...   5.11.2010 16:22
ForesTop   А как тогда, если не перебором???   5.11.2010 16:26
Archon   Используй аналитический алгоритм. Подумай, как бы ...   5.11.2010 16:29
ForesTop   Используй аналитический алгоритм. Подумай, как бы...   5.11.2010 16:35
Archon   Тогда приведу свой вариант нахождения минимального...   5.11.2010 17:28
ForesTop   Вот попробовал написать для максимального числа, в...   5.11.2010 18:25
Archon   Попробуй входные данные n = 5, k = 11.   5.11.2010 18:51
ForesTop   А так??? var n, k, i: Integer; s: String; { Тек...   5.11.2010 18:57
Archon   n = 5, k = 13 :)   5.11.2010 19:02
ForesTop   Попробуй теперь, поправил в предыдущем коде, замен...   5.11.2010 19:08
Archon   Все равно неправильно. Ответ для n = 5, k = 13 дол...   5.11.2010 19:28
ForesTop   Тогда подскажите, где у меня ошибка?   5.11.2010 19:29
Archon   Ошибка в том, что твой алгоритм дает неправильный ...   5.11.2010 19:42
ForesTop   Согласен, но я не прошу показать мне Ваше решение,...   5.11.2010 19:45
Archon   Я бы и рад так поступить, но не могу указать на не...   5.11.2010 19:56
ForesTop   Соглашусь и с этим, это не только выглядит, но и с...   5.11.2010 20:09
Archon   Я потому и просил спрашивать, если мой алгоритм не...   5.11.2010 20:18
ForesTop   Вот попробовал написать, но чего - то не получаетс...   5.11.2010 20:39
Archon   Ну снова, было бы неплохо пояснять, что именно ты ...   5.11.2010 21:06
ForesTop   Попробовал получить максимальное число методом пер...   5.11.2010 21:20
ForesTop   Всем спасибо, вот решение методом перебора цифр дл...   6.11.2010 0:58
Archon   Хорошее решение. И главное, самостоятельное =)   6.11.2010 9:25


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 12.08.2025 17:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"