Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Приклад. computer.dat computer.sol

Читайте также:
  1. I. ПРИКЛАДНОЕ ПРОГРАМНОЕ ОБЕСПЕЧЕНИЕ
  2. б) приклади
  3. Вид прикладной компьютерной программы, предназначенной для производства (включая набор, редактирование, форматирование, иногда печать) любого вида печатной информации
  4. Виды прикладных бухгалтерских программ, их роль и значение в развитии бухгалтерского учета
  5. Вопрос Прикладное ПО
  6. ВОПРОС№15:Архитектура, изобразительное и декоративно-прикладное искусство на Беларуси в 9 – 13 вв.
  7. Впливи античної та візантійської науки на розвиток філософії та фізики. Прикладний характер математики, хімії, астрономії, біології.
  8. Вращающий» момент рассматривается как внешнее усилие, прикладываемое к объекту
  9. ГБОУ СПО КОЛЛЕДЖ ДЕКОРАТИВНО-ПРИКЛАДНОГО ИСКУССТВА№ 36
  10. Дайте загальний вид інструкції оголошення масиву? Наведіть приклади?
computer.dat computer.sol
   

Розв’язок

Необхідно знайти спільні дільники чисел M та N, які не менші за число K.

Для i:=K до мінімум(N,M)

пц

якщо ост(i,N)=0 та ост(i,M)=0 то вивести (i)

кц

 

Програма:

program computer; var n,a,b,c,min:integer; f1,f2:text; begin assign(f1,'COMPUTER.dat'); reset(f1); read(f1,a,b,c); close(f1); assign(f2,'COMPUTER.sol'); rewrite(f2); if a>b then min:=b else min:=a; for n:=c to min do begin if (a mod n=0)and(b mod n=0) then write(f2,n,' '); end; writeln(f2); close(f2); end.

 

 


Задача 3. Збирання мита (TALLAGE) - 60 балів.

Король країни Аріїв завоював N міст на території сусідніх держав.

Тепер йому необхідно створити систему збирання мита з завойованих територій. Він хоче збудувати таку систему шляхів між цими містами, щоб до будь-якого міста можна було дістатися (можливо, через інші міста) зі столиці, але у воєнному стані на транспорт виділяється дуже незначна частина фінансів, тому сумарна вартість побудованих шляхів сполучення між містами має бути мінімальною.

Вхідні дані:

Перший рядок вхідного файлу містить натуральне число N (1<=N<=100) – кількість міст у країні, а також цілі числа X та Y – координати столиці.

Наступні N рядків містять через проміжок координати Xi, Yi завойованих міст.

Значення координат по модулю менші 50000.

Вихідні дані:

Перший рядок має містити дійсне число з трьома знаками після коми – сумарну вартість побудованих доріг. Вважайте, що вартість одиниці довжини дороги дорівнює одній умовній одиниці.

Наступні рядки мають містити у довільному порядку список побудованих доріг у форматі:

<номер міста> => <номер міста>

При цьому столицю позначте номером 0.

Якщо відповідей декілька, виведіть одну довільну з них.

Приклади:

TALLAGE.DAT TALLAGE.SOL
6 0 0 1 1 -1 1 0 2 1 -1 -1 -1 0 -2 8.485 2 3 3 1 1 0 0 4 4 6 6 5

 

Розв’язок

 

Теорія графів-Жадібні алгоритми – каркас мінімальної ваги (остове дерево)

Визначити довжини шляхів за формулою довжини відрізка .

На основі довжин побудувати навантажений, неорієнтований граф.

На основі алгоритма Прима або Крускала побудувати каркас мінімальної ваги, який і буде розв’язком задачі.

 

 


 

Програма:

program tallage; {$apptype console} var a:array[0..100,0..100] of extended; x,y:array[0..100] of integer; f1:text; kol_ver,v:array[0..100] of integer; n,k,i,j,vi,vj:integer; min,s:real; ver:array[0..100,1..2] of integer; f:boolean; cc:char; begin assign(f1,'tallage.dat'); reset(f1); read(f1,n); for i:=0 to n do begin read(f1,x[i],y[i]); end; close(f1);   for i:=0 to n do for j:=i to n do begin a[i,j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j])); a[j,i]:=a[i,j]; end;   k:=0; v[k]:=0; s:=0; while (k<n) do begin min:=maxint; for i:=0 to k do for j:=0 to n do if a[v[i],j]<min then begin min:=a[v[i],j];vi:=v[i];vj:=j;end; f:=true; for i:=0 to k do if vj=v[i] then f:=false; if f then begin k:=k+1; ver[k,1]:=vi; ver[k,2]:=vj; v[k]:=vj; kol_ver[vj]:=kol_ver[vj]+1; kol_ver[vi]:=kol_ver[vi]+1; s:=s+a[vi,vj]; end; a[vi,vj]:=1e30;a[vj,vi]:=1e30; end; assign(f1,'tallage.sol'); rewrite(f1); writeln(f1,s:3:3); for i:=1 to n do writeln(f1,ver[i,1],' ',ver[i,2]); close(f1); end.

 




Дата добавления: 2014-12-19; просмотров: 40 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав