Задача за програмиране 10 Програмно осигуряване на съвремените компютри (обобщение) 13 Системи за програмиране 15


Примерен вход 1 1500 Примерен изход



страница11/12
Дата21.11.2017
Размер1.86 Mb.
#35102
ТипЗадача
1   ...   4   5   6   7   8   9   10   11   12
Примерен вход

1 1500
Примерен изход

48 75
Зад. 2. Да се състави програма EQDIGIT.CPP, която по зададен интервал [K,L] (K и L цели положителни) отпечатва всички числа в интервала [K,L], които имат две съседни еднакви цифри в записа си.
Примерен вход

10 50
Примерен изход

11 22 33 44
Зад. 3. Да се състави програма AVERDIG.CPP, която въвежда от клавиатурата три цели числа m, n и к и извежда всички числа в интервала [m, n], за които средното аритметично от цифрите е равно (или по-голямо) на k.
Примерен вход

10 50 6
Примерен изход

39 48 49
Зад. 4. Да се състави функция, която по дадено цяло число и цифра k определя колко пъти в записа на числото n се среща цифрата k. Като се използва тази функция да се състави програма DIFDIG.CPP, която чете от клавиатурата цифра k и последователност от цели числа до въвеждане на отрицателно число или 0 и отпечатва броя на тези от въведените числа, които имат цифрата k в записа си поне два пъти.
Лабораторен практикум №6

Функции

Зад.1. Въведете текста на следната програма:

#include

int Suma(int a)

{

int Sum=0;



while(a)

{

Sum+=a%10;



a/=10;

}

return Sum;



}
void main()

{

int K,L,n;

cin>>K>>L;

for(n=K;n<=L;n++)



if (!(Suma(n)%11)) cout< }

a) обяснете какво прави програмата.



б) тествайте програмата за интервала [1,150] и запишете получените резултати:

в) коригирайте програмата така, че да намира най-малкото число в интервала [K,L], сумата от цифрите на което е равно на 21.

Напишете текста на новата функция.

Зад.2. Въведете програмата, която решава следната задача: Да се състави програма, която въвежда положителни цели числа(до въвеждане на 0) и отпечатва само онези, които са палиндроми.

Тествайте програмата със следните входни данни:

12, 123, 32123, 135631, 3513153, 1111111111, 11112111, 0



и запишете получените резултати.
Зад.3. Въведете програмата, която решава следната задача: Да се състави програма, която по зададен интервал [K,L] (K и L цели положителни) отпечатва най-голямата двойка дружествени числа. K и L се въвеждат от клавиатурата.

Напишете текста на програмата и я тествайте със следните входни данни:

K=1, L=1500



и запишете получените резултати.

Зад.4. Въведете програмата, която решава следната задача: Да се състави програма, която по зададен интервал [K,L] (K и L цели положителни) отпечатва онази двойка приятелски числа, която има пореден номер половината от общият им брой в интервала.K и L се въвеждат от клавиатурата. Поредния номер и тук има същия смисъл като в Зад. 1 на стр. 114.

Напишете текста на новата програма.

Масиви

  1. Теоретични бележки

  1. Пример

Задача: Да се състави програма TEMP.CPP, която за месец, състоящ се от 30 календарни дни, въвежда данните за средните дневни температури за всеки ден и извежда на екрана:

а) средната температура за месеца;

б) средната температура за второто десетдневие;

в) минималната температура за първото десетдневие;

г) датите, на които температурите са били под средната.

При анализ на задачата виждаме, че за да напишем програма имаме две възможности – да използваме тридесет напълно еднотипни променливи, на които да присвоим дневните температури. В случай като този, когато се налага работа с голямо количество еднородни обекти се използва структура от данни, наречена масив.



  1. Масив

а) Определение

Множество от краен брой, последователно разположени в паметта еднотипни променливи, които притежават общо име и се различават помежду си по своя индекс.

Всяка променлива от масива се нарича елемент на масива. В С++ масивът се дефинира като една променлива, заделя се памет за всички негови елементи и се запомня указателят към първият му елемент. Елементите на масива се разполагат един до друг в паметта и се различават помежду си по своя индекс (номер). В С++ номера на първия елемент е 0.








































0

1

2

3

4

5

6

7

8

9

..........

б) Дефиниране(деклариране) на масив:

При деклариране на масива се посочва:

- типа на неговите елементи;

- име, което е общо за всички елементи от масива;

- броя на елементите, от които той се състои.

тип име[израз];

тип – може да бъде произволен тип, позволен за използване в езика С++.

име – валиден идентификатор;

израз – определя броя на елементите в масива, този брой се нарича граница на масива; зададеният израз трябва да е константен (обикновено цяло десетично число).

Пример 1:

int A[100] - масив А с 100 елемента от тип int

float D[30] – масив D с 30 елементи от тип float

 Тъй като всеки елемент от масива е променлива, тя може да бъде разглеждана и използвана като такава.



в) Обръщение към елементите на масив.

Eлементите в масива имат общо име и се различават само по мястото, което заемат в масива. Тази позиция се нарича индекс и при обръщение към съответния елемент на масива, се записва до името му, заградена в средни скоби. Индексът на елемента на масива трябва да е цяла константа, променлива от тип int или израз с целочислена стойност.



Пример 2: А[0], A[55].

Индексът определя позицията на съответния елемент спрямо началото на масива. Споменахме, че в С++ първият елемент на масива има индекс 0 ( т.е. А[0]), така че елементаА[1] реално е втория елемент на масива.


Пример 3:

Ако имаме дефиницията int I, j, A[100]; можем да използваме следните обръщения към елементи на масива А:

A[3], А[I+5], А[I*j] и т.н.

г) Използване на елементи на масив

Предвид това, че елементите на масив са стандартни променливи и можем да се обръщаме към всяка от тях, следва че можем да ги използваме като операнди в изрази:



Пример 4:

(A[2]+A[4])/2, където А е масивът от горния пример.



  1. Операции с масиви

При разглеждане на най-често използваните действия с масиви ще направим уговорката, че ще работим с един масив и всяка една от операциите с него ще реализираме с отделна функция. В началото ще приемем, че сме декларирали масива извън всички функции в програмата, така че всяка една от тях, включително и главната да има достъп до него. За илюстрация на различните операции с масиви ще използваме целочислен масив с не повече от 100 елемента. Освен това ще приемем, че при всяко стартиране на програмата ще работим с различен брой елементи на масива, който ще се въвежда от клавиатурата. За целта ще декларираме още една глабална целочислена променлива n, в която ще прочитаме броя на елементите на масива. Ето необходимите декларации на глобални променливи, които ще използваме в следващите функции.

int a[100], n;

Тъй като повечето операции са свързани преди всичко с действия с масиви, те не връщат някаква конкретна стойност и затова ще използваме функции от тип void.



а) Въвеждане на масив

Въвеждане на масива означава запълване със стойности от клавиатурата на всички елементи на масива. Преди всичко, обаче, трябва да въведем цялото число n, което както вече се уговорихме съдържа броя на елементите в масива:

cin>>n;

Последователното въвеждане на всичките n елемента на масива ще реализираме с цикъл for, тъй като се налага да ги обходим един по един, започвайки от нулевия и да ги въвеждаме от клавиатурата.



for( int i=0; i>a[i];

Като цяло функцията за въвеждане на масива а, който декларирахме по-горе, ще изглежда така:



void read_a()

{

cin>>n;



for( int i=0; i

cin>>a[i];

}

Тук бихме могли да променим малко описания код, така че функцията да осъществява приятелски интерфейс с потребителя като извежда подходящи съобщения. Ето как би могло да стане това:



void read_a()

{

cout<<”въведи брой елементи на масива: “;



cin>>n;

for( int i=0; i

{

cout<<”a[“<

cin>>a[i];

}

}



б) Извеждане на масив

Под извеждане на масив ще разбираме последователното извеждане на всеки един елемент на масива на екрана. Според условието на задачата елементите на масива могат да се извеждат по един на ред или по няколко на ред и т.н.

При тази илюстрация ще приемем, че елементите се извеждат по един на ред. Както и при въвеждането ще опишем функция, която реализира това извеждане. Обхождането на елементите на масива отново ще извършим с цикъл for:

void write_a()

{

for( int i=0; i

cout<

}

в) Намиране на оптимален елемент на масив

За определеност ще приемем, че ще търсим минималния елемент на масива. Ще реализираме тази операция с функция, която ще връща като резултат намерения минимален елемент. Търсенето на минималния елемен ще осъществим по познатия алгоритъм за намиране на оптимален елемент:


  • определяме за минимален нулевия елемент на масива:

int m=a[0];

  • обхождаме всички останали елементи на масива и ги сравняваме с минималния. Ако намерим елемент по-малък от минималния, присвояваме стойността му на минималния.

for(int i=1;i

if(a[i]

Окончателния вид на функцията за намиране на минимален елемент на масив е следния:

int min()

{

int m=a[0];



for(int i=1;i

if(a[i]

return m;

}

Задачата за намиране на оптимален елемент може да е формулирана така, че да се налага търсенето не на самия оптимален елемент, а на неговия индекс. Тогава горната функция ще претърпи известни корекции, като в променливата m ще запомняме не стойността, а индекса на елемента. Преобразуваната функция ще бъде следната:



int minindex()

{

int m=0;



for(int i=1;i if(a[i]

return m;

}
г) Търсене на елемент в масива

Стандартната формулировка на задачата за търсене на елемент на масива е следната: “Даден е израз х, който е от типа на елементите от масива. Да се състави функция, която намира индекса на елемент, равен на х в масива. Ако в масива няма елемент, равен на х, функцията връща стойност –1”.

За решаване на тази задача ще изпозваме функция, която приема като параметър цялото число х и в тялото си обхожда всички елементи на масива с помощта на цикъл for, като на всяка стъпка проверява дали поредния елемент на масива е равен на х. Ако открие такъв елемент функцията веднага връща като резултат индекса му. Ако цикълът завърши без да е намерен елемента х, функцията връща резултат -1. Ето как ще изглежда и конкретната реализация:



int search(int x)

{

for(int i=0;i

if(a[i]==x)return i;

return -1;

}


  1. Решени задачи

Задача 1. Масив

Да се състави програма MASIV.CPP, която обработва целочислен масив с n (n100) елемента и изпълнява последователно следните операции:



  • прочита от клавиатурата цялото число n и елементите на масива;

  • извежда на екрана минималния елемент на масива;

  • прочита от клавиатурата цяло число k и извежда на екрана номера на първия елемент, равен на k;

  • извежда на екрана всички елементи на масива, като всеки елемент се извежда на отделен ред.

Решение

  1. Необходими величини:

Според уговорката, която направихме по-горе, е необходимо да декларираме една променлива от тип масив от цели числа и променлива n, съдържаща броя на елементите на масива. И двете променливи трябва да бъдат глобални, за да са достъпни от всички функции, които ще използваме за реализацията на програмата. В този случай ще декларираме:

int a[100], n;

непосредствено след описанието на директивите към предпроцесора.



  1. Във функцията main ще декларираме променливата k, описана в третото условие на задачата. По-горе описахме по една функция за всяка една от дейностите, зададени в условието:

  • Въвеждането на масива се изпълнява от функцията void read_a();

  • Намирането на минималния елемент – от функцията int min();

  • Намирането на първия елемент, равен на k – от функцията int search(int x);

  • Отпечатването на елементите на масива на екрана – от функцията void write_a().

  1. Като използваме тези функции, ще реализираме следната главна функция.

void main()

{

int k;

read_a();

cout<<”min = “<

cout<<”k= “ ; cin>>k ;

int l=search(k);

if(l==-1) cout<<”няма такъв елемент в масива\n “;



else cout< write_a() ;

}

Ето целия текст на програмата, решаваща задачата:



//masiv.cpp

#include



int a[100], n;

void read_a()

{

cin>>n;



for( int i=0; i

cin>>a[i];

}

void write_a()

{

for( int i=0; i

cout<

}

int min()

{

int m=a[0];

for(int i=1;i

if(a[i]

return m;

}

int search(int x)

{

for(int i=0;i

if(a[i]==x)return i;

return -1;

}

void main()

{

int k;

read_a();

cout<<”min = “<

cout<<”k= “ ; cin>>k ;

if(search(k)==-1) cout<<”няма такъв елемент в масива\n “;

else cout<

write_a() ;

}
Задача 2. Редица

Да се състави програма REDICA.CPP, която въвежда от клавиатурата цяло число n (n<100) и рeдица от n цели числа и отпечатва броя на отрицателните елементи от редицата.

а) добавете нова функция, която намира индекса на първото просто число в редицата и добавете в главната функция отпечатването на това число;

б) добавете нова функция, която отпечатва всички нечетни елементи на редицата само, ако броя на отрицателните съвпада с индекса на първото просто число в редицата.



Решение

  1. Необходими величини:

За представянето на редицата ще използваме масив от цели числа, който ще бъде глобален за цялата програма. Като глобална ще обявим и променливата n, съдържаща броя на елементите на редицата.

int a[100],n;

  1. За въвеждане на масива ще използваме описаната вече в предишната задача функция read_a().

  2. Да напишем функцията, която връща броя на отрицателните числа:

  • Тази функция ще пресмята брой и следователно ще връща резултат от тип int.

  • В тялото на функцията ще ни е необходима една променлива, в която ще отчитаме броя на отрицателните числа:

int b=0;

  • Търсеният брой ще намерим като прегледаме всички елементи на масива и за всеки проверяваме дали е отрицателно число, при което ако елемента е отрицателен, ще увеличаваме брояча с 1. Това се реализира с цикъл for.

  • Накрая функцията трябва да върне като резултат стойността на b.

return b;

Ето общия вид на функцията:



int count_negative()

{

int b=0;



for (int i=0;i
if(a[i]<0)b++;

return b;

}


  1. Главната функция ще включва обръщение към функцията за четене и отпечатване на резултата от функцията count_negative.

void main()

{

read_a();



cout<

}


  1. За решението на подточка а) ще използваме известната вече функция prime, която определя дали дадено цяло число е просто. Решението ще реализираме отново с функция, която връща като резултат индекса на първото просто число. За тази реализация ще използваме следния алгоритъм:

  • Обхождаме масива а (преглеждаме неговите елементи), започвайки от нулевия му елемент и на всяка стъпка проверяваме дали поредния елемент на масива е просто число.

  • Щом намери такъв елемент функцията ще прекратява своята работа и ще връща индекса, до който е стигнала. Ако такъв елемент не бъде намерен, функцията ще върне –1.

int first_prime()

{

for(int i=0;i<=n;i++)



if(prime(a[i])) return i;

return –1;

}


  • Остава да добавим в главната функция отпечатването на намереното първо просто число. Това ще се реализира със следните редове:

int k=first_prime();

if(k==-1)cout<<”няма прости числа\n”;

else cout<

  1. Решението на подточка б) ще оставим на читателя като ще отбележим само, че преди да отпечатаме всички нечетни числа трябва да проверим условието: first_prime()==count_negative() и да предприемем отпечатването само ако то е истина.

Задача 3. Положителни елементи

Да се състави програма POSITIVE.CPP, която въвежда от клавиатурата цяло число n (n<100) и рeдица от n цели числа и отпечатва средното аритметично от положителните и елементи.



Решение:

  1. Необходими величини:

По аналогия с предната задача отново ще използваме глобалния масив а[100] и променливата n, съдържаща броя на елементите в масива.

  1. За улеснение ще копираме и функцията за четене на елементите на масива.

  2. Функцията, която намира средното аритметично на елементите от масива, ще бъде от тип float и ще има следния вид:

float ave_pos()

{

float S=0;



int br=0;

for (int i=0;i
if(a[i]>0) {S+= a[i]; br++}

return S/br;

}


  1. Главната функция, която решава тази задача е следната:

void main()

{

read_a();



cout<

}
Задача 4. Обръщане

Да се състави програма REV_MAS.CPP, която въвежда от клавиатурата цяло число n (n<100) и масив от n дробни числа и го обръща обратно (т.е. първият елемент става последен, а последният първи; вторият предпоследен, а предпоследният втори и т.н.).

Решение:


  1. Необходими величини:

По аналогия с предната задача отново ще използваме глобалния масив а и променливата n, съдържаща броя на елементите в масива, както и функцията за въвеждане на глобалния масив а read_a().

  1. Преобразуването на масива ще стане в отделна функция, която ще бъде от тип void, тъй като няма да връща конкретна стойност.

В нея ще трябва да преценим зависимостта между индексите на елементите, които трябва да разменим:

Според условието елемента а[0] ще разменим с елемента а[n-1];

Eлемента а[1] – с a[n-2];

Eлемента а[2] – с a[n-3];

Eлемента а[i] – с a[n-(i+1)];



Eлемента а[n/2-1] – с a[n/2];

Това означава, че трябва да обходим само половината от елементите на масива и всеки от тях да разменим със съответният му. Описаната функция изглежда по следния начин:

void revert()

{

for(int i=0;i

{

int z=a[i];

a[i]=a[n-(i+1)];

a[n-(i+1)]=z;

}

}



Същата фукция може да се реализира и по следни начин:

void revert()

{

int i=0, j=n-1;



while(i{ int z=a[i];

a[i]=a[j];

a[j]=z;


i++;j--;

}

}



  1. За отпечатване на новополучения масив ще използваме отново описаната вече функция за отпечатване на глобален масив write_a().

Задача 5. Температури

Да се състави програма TEMP.CPP, която за месец, състоящ се от n календарни дни, въвежда данните за средните дневни температури за всеки ден и отпечатва:

а) средната температура за месеца;

б) средната температура за второто десетдневие;

в) минималната температура за първото десетдневие;

г) датите, на които температурите са били под средната;

д) най-дългия период на застудявяне – последователност от дни с температура под средната.

Решение


  1. Необходими величини.

Както и в предишната задача ще използваме глобален масив за средните дневни температури, който е с цели числа и съдържа n елемента. Тъй като в част от условията се иска отпечатване на дати, няма да използваме нулевия елемент от масива, за да може индекса на масива да съответства на датата. Така, че декларираме:

double a[31]; int n;

  1. Като начало да опишем функция, която въвежда средните дневни температури по дати от клавиатурата. Тя е аналогична на функцията read_a(), която използвахме в предишната задача, но ще добавим подходящо съобщение, за това кой елемент въвеждаме:

void read_a()

{

cout<<”Въведете броя на дните в месеца: “



cin>>n;

for( int i=1; i<=n;i++)

{

cout<<”Въведете средната температура на “<

cin>>a[i];

}

}



Другата разлика между тази функция и горната е, че въвеждането на елементите започва от първия, поради уговорката, че няма да използваме нулевия елемент.

  1. Сега можем да пристъпим към последователното реализиране на всяка една от функциите:

  • Намирането на средната месечна температура ще реализираме, като с помощта на цикъл for ще сумираме всички елементи на масива и получената сума разделим на n.

int average()

{

int S=0;



for(int i=1;i<=n;i++) S+=a[i];

return S/n;

}


  • Средната температура за второто десетдневие ще намерим по същия начин, но ще сумираме само елементите, с индекси от 11 до 20 и ще разделим сумата на 10.

int average10()

{

int S=0;

for(int i=11;i<=20;i++) S+=a[i];

return S/10;

}


  • Минималната температура за първото десетдневие ще намерим подобно на намирането на минимален елемент на масив от предходната задача, но ще обходим само първите 10 елемента на масива:

int minfirst10()

{

int m=a[1];



for(int i=2;i<=10;i++)

if(a[i]

return m;

}


  • За да намерим датите, на които температурите са били под средната трябва първо да намерим средната месечна температура и да я присвоим на една променлива, като след това ще обходим всички дати от месеца и ако температурата е по-малка от средната, ще извеждаме съответната дата:

void minaver()

{

int av=average();



for ( int i=1;i<=30;i++)

if(a[i]}

  • Остава да опишем функцията, която намира най-дългия период на застудяване. В случая става дума за стандартен алгоритъм за намиране на най-дълга последователност от елементи на масив, притежаващи едни и същи свойства. За реализацията на този алгоритъм са необходими две променливи, едната от които съдържа индекса на първия елемент на най-дългата последователност, а втората – дължината на тази последователност. Необходими са и две променливи със същото предназначение за текущата последователност.

В началото ще инициализираме всички тези променливи с 0, с изключение на началото на текущата последователност, което ще има стойност 1:

int m1=0, md=0, t1=1, td=0 ;

След това ще обходим елементите на масива един по един и за всеки ще проверяваме дали е под средната температура за месеца. Ако е така, това означава, че трябва да добавим още един елемент към текущата последователност, т. е. td++. В противен случай означава, че сме намерили елемент с по-висока температура, т. е. края на текущата последователност – в този момент е необходимо да сравним намерената дължина на текущата последователност с тази на максималната и ако е по-голяма да я присвоим на променливата, в която се пази минималната температура. Едновременно с това не трябва да забравяме да присвоим и на началото на най-дългата последователност началото на текущата, като при това присвоим на променливата td (дължината на текущата последователност) стойност 0, а на променливата t1 (началото на текущата последователност) индекса на следващия елемент на масива. Когато обхождането завърши е необходимо още веднъж да сравним дължината на текущата последователност с най-дългата, за да не пропуснем случая, когато най-дългата последователност е в края на масива. Ето как изглежда функцията, решаваща тази част от задачата:



void longseq()

{

int av=average();

int m1=0, md=0, t1=1, td=0 ;

for(int i=1;i<=30;i++)

if(a[i]
else

{

if(td>md){md=td; m1=t1;}

td=0;t1=i+1;

}

if(td>md){md=td; m1=t1;}

cout<<”най-дългият период на затопляне е от “<

}

В главната програма последователно ще извикаме всички функции, които написахме. Предоставяме на читателя тази вече сравнително тривиална задача.



  1. Задачи за упражнение:

Зад. 1. Определете броя на елементите в масива A, B, C като знете, че последните елементи в съответните масиви са:

а) A[5];


б) B[(i+j)*3], ако i=3, j=5;

в) C[i/3+j%3], ако i=7, j=5;



Зад. 2. Даден е масив от 6 елемента int A[5], като



А[0]

A[1]

A[2]

A[3]

A[4]

A[5]

3

-2

8

7

5

-3

Какви стойности имат елементите на масива след изпълнението на следните операции за присвояване:

а) A[5]=5;

б) A[5]=A[0];

в) A[3]=(A[2]+A[4])/2;

г) X =A[3]; A[3]=A[4]; A[4]=X;


Зад. 3. Да се състави програма за работа с масив от цели числа, която да въвежда от клавиатурата броя на числата и самите числа и:

а) сгъстява масива, като премахва нулевите му елементи;

б) отпечатва броя на платформите в масива. (платформа е последователност от равни елементи – в условието на задачата платформата може да бъде зададена като последователност от елементи, които изпълняват определено свойство);

в) отпечатва началния и крайния индекс на най-дългата платформа в масива;

г) разменя местата на първия елемент, равен на минималния и последния елемент, равен на максималния.

Зад. 4.Редици

Имате редица от цели числа с дължина N (3

а) растяща редица - всеки пореден член е не по-малък от предишния член (A).

б) строго растяща редица - всеки пореден член е по-голям от предишния член (B).

в) намаляваща редица - всеки пореден член е не по-голям от предишния член (C).

г) строго намаляваща редица - всеки пореден член е по-малък от предишния член (D).

д) осцилираща редица - ако предищния член е бил по-малък от сегашния, то следващия е по-малък или равен на сегашния и обратно - ако предишния член е бил по-голям от сегашния то следващия трябва да е по-голям или равен на сегашния (E).

е) строго осцилираща - същото като осцилираща, само че не може да има два последователни еднакви елемента (F).

ж) аритметична прогресия - всеки член се получава от предишния с прибавяне на число, което е константа за цялата редица и може да е положително, отрицателно или нула (G).

з) геометрична прогресия - всеки член се получава от предишния с умножение на число, което е константа за цялата редица и може да е положително или отрицателно (H).


Примерен вход

5 1 2 3 4 5

4 1 –1 1 –1

5 1 2 3 3 8

8 1000 900 800 700 –1 –2 –3 –4

6 -1 7 7 –8000 –90 –100



Примерен изход

ABG


EFH

A

CD



E
Зад. 5. Великата Стена

Великата Стена разделяла Острова на Програмистите на две части - едната била на програмистите пишещи на Паскал, другата - на пишещите на С. Това било направено с цел срещите им да се сведат до нула понеже иначе се стигало до спорове завършващи в Пирогов. Стената била тухлена,като тухлите били наредени в колони,плътно залепени една до друга и с еднаква височина. Но една нощ вандали (програмисти на ассемблер) разместили тухлите като вземали от една колона и ги слагали върху някоя друга. Така стената станала неравна и можело да се мине през нея. Това било недопустимо, затова бил извикан известния майстор - QuickBasic, който трябвало да възстанови стената. Но QuickBasic имал странен нрав-искал преди да започне работа всичко да е предефинирано и известно, затова сега му е необходимо да научи с колко премествания на тухли може да се свърши работата и ако може с по-малко защото и не е много паметлив. На Вас се пада задачата да откриете (независимо от коя страна на стената сте) какъв е минималния брои тухли, които трябва да се преместят за да се изравни стената. Под едно преместване се разбира: вземаме една тухла от някоя колона с поне една тухла (броя на тухлите в тази колона намалява с една) и я слагаме върху някоя друга (броя на тухлите във втората се увеличава с една).

От клавиатурата се въвеждат следните данни:

На първия ред се намира цялото число N (1<= N<=3000) показващо броя на колоните в стената.

На следващите N реда е самата стена,като на всеки ред се намира цяло число Xi (0<=Xi<=60000) показващо броя на тухлите в i-тата колона.Общия брой на тухлите в стената не надвишава 60000.

Програмата отпечатва намереното число (минималния брой премествания) на екрана.


Примерен вход

4

4 9 8 7



Примерен изход

3
Зад. 5 DATE

Щастлива година е тази, която има в записа си две равни цифри. Да се състави програма DATE.EXE, която чете от клавиатурата цяло число n и след него n години, и извежда на екрана броя на тези от тях, които имат по две еднакви цифри.

Примерен вход

4

1234



1987

1271


2001

Примерен изход

2


Зад. 6 Дадени са резултатите от N(N<=100) поредни хвърляния на зарче. Да се състави програма ZAR4E.CPP, която прочита от клавиатурата броя N на хвърлянията и падналите се числа и отпечатва:

числото, което се е падало най-често;

началния и крайния номер на най-дългата последователност от еднакви попадения.


Каталог: tadmin -> upload -> storage
storage -> Литература на факта. Аналитизъм. Интерпретативни стратегии. Въпроси и задачи
storage -> Лекция №2 Същност на цифровите изображения Въпрос. Основни положения от теория на сигналите
storage -> Лекция 5 система за вторична радиолокация
storage -> Толерантност и етничност в медийния дискурс
storage -> Ethnicity and tolerance in media discourse revisited Desislava St. Cheshmedzhieva-Stoycheva abstract
storage -> Тест №1 Отбележете невярното твърдение за подчертаните думи
storage -> Лекции по Въведение в статистиката
storage -> Търсене на живот във вселената увод
storage -> Еп. Константинови четения – 2010 г някои аспекти на концептуализация на богатството в руски и турски език


Сподели с приятели:
1   ...   4   5   6   7   8   9   10   11   12




©obuch.info 2024
отнасят до администрацията

    Начална страница