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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Помогите решить задачу. Индикатор
ForesTop
сообщение 5.11.2010 20:39
Сообщение #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 
 К началу страницы 
+ Ответить 
Archon
сообщение 5.11.2010 21:06
Сообщение #22


Профи
****

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

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


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


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ForesTop
сообщение 5.11.2010 21:20
Сообщение #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 - 6.11.2010 0:12
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ForesTop
сообщение 6.11.2010 0:58
Сообщение #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 - 6.11.2010 1:02
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 6.11.2010 9:25
Сообщение #25


Профи
****

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

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


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


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

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

 



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