Програмування 2012



Задача2
program сокровища;// сортировка 2-х масивов по убыванию 2 олим задача 2012-2013 года


var

A: array [1..4] of integer;
B: array [1..4] of integer;
i, j : integer;
y,X: integer;
begin
  writeln ('zapolnenie veca');
  for  i:=1 to 4 do
    begin
      read (A[i]);
    end;

    writeln ('Zapolnenie stoimosti');
    
    for i:=1 to 4 do
      begin
      read (b[i]);
      end;
  for i:=1 to 3 do
    for j:=i+1 to 4 DO
    if a[J] > a[I] then 
    BEGIN
      y:=a[J];
      a[j]:=a[i];
      a[i]:=y;
    end;
    for I:=1 to 3 do 
      for j:=i+1 to 4 do
      if B[j]> B [i]then 
      begin
      y:=B[j];
      B[j]:=B[i];
      B[i]:=y;
      end;
    
    for  i:=1 to 4 do
      begin
        
    X:= X+ A[i]*B[i];// максимальная стоимость
        
        
      end;
    writeln ('Деньги = ',x);
    readln ;
    readln ;
  
end.
Задача1

program olim2012_zad1;//мальвина
var

f1,f2 :Text;//файлы
N,c50,c15,c1, ost,ost1,s,s50,s15,s1: integer;

begin
  Assign (f1,'input.txt');
  Assign (f2,'output.txt');
  Reset (f1);
  Rewrite (f2);
  read  (f1,N);
  c50 :=  N div 50;
  ost:= N mod 50;
  c15 := ost div 10;
  c1 := ost mod 10;
  
  s1:= c50*50+c15*15+c1*2;
  s50:= (c50+1)*50;
  s15:= c50*50+(c15+1)*15;
  s:=Min (s1,s50);
  s:= Min(s,s15);
  
  Write (f2,s);
  Close (f1);
  Close (F2);

end.
Задача1

var
f,f1 : text;
S,S1,S2,S3,c,c10,c50,c1,p,M: integer;

begin
Assign (f,'input.txt');
Reset (f);
read (f,c);
close (f);
c50:= c div 50;
P:= c mod 50;
C10:= P div 10;
C1:= P mod 10;
S:=C50*50+C10*15+C1*2;//цветы по 50,15,2
S1:=(C50+1)*50;// когда выгоднее купить лишние букет по 50
S2:= C50*50+(C10+1)*15;//когда выгоднее купить лишний букет по 15
if (S<S1) and (S<S2) then M:=S else
  If S1<S2 then M:=S1 else M:=S2;
Assign (f1,'output.txt');
Rewrite (f1);
Write  (f1,M);
close (f1);
end.

Задача3

program zad3_2012;
var
N, I,j ,Par : integer;
A,B,C: array [1..100] of integer;
function m (A,B:integer):integer;// функция мин
  begin
   if A>B then m:=B else M:=A
  end;
begin
Assign (input,'input.txt');
Reset (input);
read (N);
for i:=1 to N do
  begin
  read (A[i]);
  end;

for i:=1 to N-1 do
  for J:=i+1 to N do
    if A[I]>A[j] then begin
      Par:=A[j];
      A[j]:=A[i];
      A[i]:=Par;
     end;
for i:=1 to N-1 do
  begin
    B[i]:=A[I+1]-A[i];//масив длины дорожек между  соседними домами
   end;
N:=N-1;
C[1]:=B[1]; // мин раст между 1 и 2 домом
C[2]:=C[1]+B[2];//мин раст между 1,2,3 домом
for I:=3 to N do
  C[i]:=m(C[I-1],C[I-2])+B[i];// выбираем самое короткое растояние и добавляем путь к дому n+1
Writeln;
Assign (output,'output.txt');
Rewrite (output);
Write (C[n]);
Close(input);
Close (output);
end.

Відсортуємо координати будинків за зростанням (масив координат К). Завжди останній й передостанній будуть з’єднані стежкою, як і перший з другим(у відсортованому масиві).
Якщо у нас два будинка, то мінімальна довжина стежки буде дорівнювати D[1]=K[2]-K[1].
Три будинка -  D[2] = D[1]+(K[3]-K[2]).
Чотири будинка - D[3] = D[1]+(K[4]-K[3]) (перший з другим і третій з четвертим).
Якщо п’ять будинків, то з’єднуємо четвертий з п’ятим (K[5]-K[4]), а серед двох можливих варіантів з’єднань вибираємо менший Min(D[3], D[2]). Отже, для п’яти  
D[4] = Min(D[3], D[2])+(K[5]-K[4]). Для чотирьох будинків ця формула теж буде працювати й запис буде таким: D[3] = Min(D[2], D[1])+(K[4]-K[3]). У загальному випадку маємо формулу: D[i] = Min(D[i-1], D[i-2])+(K[i+1]-K[i]). Послідовно заповнюємо масив D, використовуючи формулу, й отримаємо правильну відповідь в D[N-1].


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

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