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