egorova90356684858370
?>

Почему не увеличивается k, когда a[i] mod 2<>0 var s, i, p:char; v1, v2:string; k:integer; a:array['A'..'Z'] of integer; begin k:=0; v1:=''; v2:=''; for i:='A' to 'Z' do a[i]:=0; repeat read(s); s:=upcase(s); if s in['A'..'Z'] then inc(a[s]); until s='.'; for i:='A' downto 'Z' do begin if a[i] mod 2<>0 then begin inc(k); p:=i; end; //не увеличивает k if k=2 then begin writeln('No'); break; end; end; if (k=0)or(k=1) then begin writeln('DA'); for i:='Z' downto 'A' do while a[i]<>0 do begin v1:=v1+i; v2:=i+v2; a[i]:=a[i]-2; end; end; writeln(v1+p+v2); end.

Информатика

Ответы

Ерцкин_Овечкина391

язык какой программирования какой?

natkuv7
Я уже решал эту задачу.
Я руками за 5 дней делаю 5 коробок, и на 6-ой день покупаю духовку.
Руками и духовкой я делаю 2 коробки в день, за 5 дней - 10 коробок.
На 6-ой день я покупаю вторую духовку.
Руками и 2-мя духовками я за 5 дней делаю 15 коробок, и на 6-ой день покупаю 3-ью духовку.
И так далее. Чтобы купить очередную духовку, я работаю 5 дней, а на 6-ой день ее покупаю, и у меня печенья не остается совсем.
То есть, после покупки каждой духовки я начинаю всё с нуля.
Главное - понять, когда нужно остановиться покупать духовки и начать уже копить печенье на складе.
Итак, подведем итоги:
1) На покупку каждой духовки мы тратим 6 суток и начинаем с нуля.
2) Имея n духовок, мы делаем 584 коробок печенья за 
trunc(584/(n+1)) + 1 дней, где trunc(x) = [x] - это целая часть x. 
3) Всего мы тратим времени T(n) = 6n + trunc(584/(n+1)) + 1 --> min
Минимум функции trunc(584/(n+1)) совпадает с минимумом 584/(n+1)
T(n) = 6n + 584/(n+1) + 1 --> min
T'(n) = 6 - 584/(n+1)^2 = (6(n+1)^2 - 584) / (n+1)^2 = 0
6(n+1)^2 - 584 = 0
(n+1)^2 = 584/6 = 97,33
n + 1 = √97,33 ~ 9,86 = 10
n = 9
Значит, нужно ограничиться покупкой 9 духовок.
За 6*9 = 54 дня мы их купим, и за 584/10 ~ 59 дней мы соберем нужное количество коробок на складе.
Всего мы истратим 54 + 59 = 113 дней.
monenko
Можно написать программу на каком-либо языке программирования. Например Python:

n = 66
count = 0
for i in range(67):
  for j in range(34):
     for k in range(14):
         for l in range(7):
            if n == i*1+j*2+k*5+l*10:
                count += 1
print('Всего

Та же программа на языке Pascal:

var i,j,k,l,n,count:integer;

begin
n := 66;
count := 0;
for i:=0 to 66 do
    for j:=0 to 33 do
        for k:=0 to 13 do
            for l:=0 to 6 do
                if n = (i*1+j*2+k*5+l*10) then count += 1;
  writeln('Всего
end.

ответ: 700

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Почему не увеличивается k, когда a[i] mod 2<>0 var s, i, p:char; v1, v2:string; k:integer; a:array['A'..'Z'] of integer; begin k:=0; v1:=''; v2:=''; for i:='A' to 'Z' do a[i]:=0; repeat read(s); s:=upcase(s); if s in['A'..'Z'] then inc(a[s]); until s='.'; for i:='A' downto 'Z' do begin if a[i] mod 2<>0 then begin inc(k); p:=i; end; //не увеличивает k if k=2 then begin writeln('No'); break; end; end; if (k=0)or(k=1) then begin writeln('DA'); for i:='Z' downto 'A' do while a[i]<>0 do begin v1:=v1+i; v2:=i+v2; a[i]:=a[i]-2; end; end; writeln(v1+p+v2); end.
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

Дмитрий74
vdk81816778
Aleksandr72
Kostyuchik-Astakhov531
elivanova
alyans29
Savva1779
tatianaavoronina66
dashanna04225
Vitalevich
Корнеплодович1930
Karlova1507
kulagin777
sveta1308
Alekseevich1012