1. Довга арифметика.
Обчислити значення 2 в степені n, де n- натуральне число.
Вхідні дані: Число <10000.
Приклад: Вхід 17. Результат 131072
На перший погляд це дуже легка задача, яка вирішується елементарним циклом. Але все криється в умові, що степінь повинен бути до 10000. При такому степені результат не поміститься ні в один тип даних. Тому для розвя’зування даної задачі потрібен інший підхід. Ідея така: організувати множення в стопчик і кожну цифру результату зберігати в окремому елементі масиву. Нижче наведена задача реалізує дану ідею.
program stepin_2;
var
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;
for i := l downto 1 do write(a[i]); {виводимо результат}
end.
Особливого пояснення дана задача не потребує. Зрозуміло, що потрібно обчислити час, який потрібно витратити на різні види транспорту, і вибрати найменший.
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.
Обчислити значення 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: Поездка в школу
Сложность:Особливого пояснення дана задача не потребує. Зрозуміло, що потрібно обчислити час, який потрібно витратити на різні види транспорту, і вибрати найменший.
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.
Немає коментарів:
Дописати коментар