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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Помогите решить задачу. Индикатор
сообщение
Сообщение #21


Новичок
*

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

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


Вот попробовал написать, но чего - то не получается, подскажите, может чего-то не так делаю?

var
n, k, i, j: Integer;
s: 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);


for i := 1 to n do
s[i] := '9';

k := j;

k := k - (n * 6);

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

i := i + 1;
while (i <= n) and (k > 0) do begin
if k <= 3 then begin
s[i] := '7';
k := k - 1;
end else begin
s[i] := '9';
k := k - 4;
end;

i := i + 1;
end;

writeln(s);
end;

end;

readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

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


Ну снова, было бы неплохо пояснять, что именно ты делаешь.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Новичок
*

Группа: Пользователи
Сообщений: 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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Новичок
*

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

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


Всем спасибо, вот решение методом перебора цифр для каждого числа.

const cnt: array[0..9]of Integer = (6, 2, 5, 5, 4, 5, 6, 3, 7, 6);
var
n, k : integer;
i : integer;
j : integer;
max, min : string;
st : integer;
ck, nk : integer;
cn : integer;

begin
readln(n, k);
if (k < 2 * n) or (k > 7 * n) then begin
writeln('NO SOLUTION');
halt(0);
end;
min := '';
ck := k;
cn := n;
for i := 1 to n do begin
st := 0;
if (i = 1) then begin
st := 1;
end;
for j := st to 9 do begin
nk := ck - cnt[j];
if (nk >= 2 * (cn - 1)) and (nk <= 7 * (cn - 1)) then begin
min := min + chr(ord('0') + j);
ck := nk;
cn := cn - 1;
break;
end;
end;
end;

max := '';
ck := k;
cn := n;
for i := 1 to n do begin
st := 0;
if (i = 1) then begin
st := 1;
end;
for j := 9 downto st do begin
nk := ck - cnt[j];
if (nk >= 2 * (cn - 1)) and (nk <= 7 * (cn - 1)) then begin
max := max + chr(ord('0') + j);
ck := nk;
cn := cn - 1;
break;
end;
end;
end;
writeln(min);
writeln(max);
readln;
end.


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


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

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


Хорошее решение. И главное, самостоятельное =)


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 1.11.2020 3:31
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name