Збірник задач №1

1. Довга арифметика.
Обчислити значення 2 в степені n, де n- натуральне число.
Вхідні дані: Число <10000.

Приклад: Вхід 17. Результат 131072

На перший погляд це дуже легка задача, яка вирішується елементарним циклом. Але все криється в умові, що степінь повинен бути до 10000. При такому степені результат не поміститься ні в один тип даних. Тому для розвя’зування даної задачі потрібен інший підхід. Ідея така: організувати множення в стопчик і кожну цифру результату зберігати в окремому елементі масиву. Нижче наведена задача реалізує дану ідею.
 
program stepin_2;

var
  a: array[1..100000] of integer;             {описуємо масив для результату}
  i, l, k, n, j: integer;

begin
  readln(n);
  a[1] := 1;l := 1;                  {задаємо початкові дані. Змінна l відповідає за довжину результау}
  for i := 1 to n do              {цикл який рахує степінь}
  begin
    k := 0;                          {k- змінна, що відповідає за надлишок при множення елемента масиву}
    for j := 1 to l do           {на 2. Це те, що при множенні в стовпчик ми повинні пам’ятати }
    begin
      a[j] := a[j] * 2 + k;
      k := a[j] div 10;
      a[j] := a[j] mod 10;
      end;
    if k > 0 then begin l := l + 1;a[l] := k; end;                      {Якщо, в кінцевому розряді є                   надлишок, збільшуємо  довжину масиву}
  end;
  for i := l downto 1 do write(a[i]);                                  {виводимо результат}
end.

E: Поездка в школу

Сложность: 2

[Вложение не найдено]

Особливого пояснення дана задача не потребує. Зрозуміло, що потрібно обчислити час, який потрібно витратити на різні види транспорту, і вибрати найменший.

program hhh;
var x,y,z,m,ktv,ktr,kav,min:integer;
begin
readln(x);
readln(y);
readln(z);
readln(m);
if m mod 15<>0 then ktv:=(15-m mod 15) else ktv:=0; //очікування на трамвай
if m mod 10<>0 then ktr:=(10-m mod 10) else ktr:=0; //очікування на тролейбус
if m mod 5<>0 then kav:=(5-m mod 5) else kav:=0; // очікування на автобус
x:=x+ktv;
y:=y+ktr;
z:=z+kav;
if x<=y then min:=x else min:=y;
if z<min then min:=z;
writeln(min);
end.

Немає коментарів:

Дописати коментар