saltikovaPavlenko
?>

Какую вы знаете интегрированную среду визуального программирования на паскале? на какой реализации языка паскаль она основана?

Информатика

Ответы

tanyaandreeva728
Среда программирования Lazarus 
Какую вы знаете интегрированную среду визуального программирования на паскале? на какой реализации я
FinKozhevnikov28
Можно написать программу на каком-либо языке программирования. Например 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
kazimov832
Вариант понимания условия №1. Мы достаём монеты по одной, и порядок монет важен (т.е., например, если мы вытащили сначала монету 1 рубль, потом 5 рублей и если сначала 5 рублей, потом 1 рубль - разные
Обозначим C(n) - число набрать n рублей. Очевидно, C(n) = C(n-1) + C(n-2) + C(n-5) + C(n-10) [Представим себе. что мы знаем число набрать n-5 рублей. Тогда если мы уверены, что последней вытащили 5-рублёвую монету, то будет C(n). Финальный ответ - сумма по всем возможным выборам последней монеты]
Полагая C(n) = 0 при всех n < 0, C(0) = 1, получим по этой формуле
С(66) = 1431020833989040 
Cчитать можно, например, такой программой:
var  C: array[-9..66] of BigInteger;
begin
  for var i := -9 to -1 do
    C[i] := 0;
  C[0] := 1;
  for var i := 1 to 66 do
    C[i] := C[i - 1] + C[i - 2] + C[i - 5] + C[i - 10];
  print(C[66]);
end.
Вариант понимания условия №2. Нам порядок выдачи не важен. Тогда вопрос по сути сводится к числу целых неотрицательных решений уравнения
x + 2y + 5z + 10t = 66, где x, y, z, t - число 1-, 2-, 5- и 10-рублёвых монет соответственно.
Тут можно написать общую формулу, но она будет объемной, так что вычислять по ней совсем не радостно (даже с компьютером). Поэтому проще все варианты перебрать. ответ получится 700.
Пример программы:
begin
  var count := 0;
  for var t := 0 to 6 do
    for var z := 0 to (66 - 10*t) div 5 do
      for var y := 0 to (66 - 10*t - 5*z) div 2 do
        inc(count);
  print(count);
end.

Подобным образом можно считать и вручную. По сути нам требуется вычислить сумму [1 + (66 - 10t - 5z)/2] по всем допустимым t, z ([x] - целая часть x). Перебираем сначала t, потом z:
t = 0. z = 0,1,2,...,13. Вклад в сумму 34 + 31 + 29 + 26 + 24 + 21 + 19 + 16 + 14 + 11 + 9 + 6 + 4 + 1 = 245.
t = 1. z = 0,1,2,...,11. Легко понять, что здесь будут все числа без первых двух слагаемых: 29 + 26 + 24 + 21 + 19 + 16 + 14 + 11 + 9 + 6 + 4 + 1 = 245 - 34 - 31 = 180
Аналогично, t = 2: 180 - 29 - 26 = 125
t = 3: 125 - 26 - 21 = 80
t = 4: 80 - 19 - 16 = 45
t = 5: 45 - 14 - 11 = 20
t = 6: 20 - 9 - 6 = 5
Итого 245 + 180 + 125 + 80 + 45 + 20 + 5 = 700

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

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

Какую вы знаете интегрированную среду визуального программирования на паскале? на какой реализации языка паскаль она основана?
Ваше имя (никнейм)*
Email*
Комментарий*

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

baranovaas
dima-pashkovec
zurabghiendzhoian886
Владимир-Денисович1080
suturinavaleriya51
Салиев
muzaffarovich-Sergei1777
Александрович175
anikamalish
VSArsentev
vipppp19743355
Дмитрий Бундин
Vik1744184
nataljatchetvertnova
Artyukhin545