L и височина h. Известно е, че с една кутия боя могат да се боядисат m квадратни единици площ от стената. Напишете програма



страница4/5
Дата31.12.2017
Размер0.96 Mb.
#38459
ТипЗадача
1   2   3   4   5

else

if ((lh==h) && (lm<=m)) cout<<"No"<
else cout<<"Yes"<
return 0;

}

Задача 108: Правоъгълници



(Национална олимпиада по информатика, Национален кръг, 29 април 2006 г. Тема за група Е (4-5 клас))

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

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

Примерен вход: 5 7 6 3

Примерен изход: 30
Задача 109: Треска за злато

(Есенен турнир по информатика, Шумен’ 2006 г.,Тема за група E (4-5 клас)) Седем участници се състезават на „златната пирамида” в „Треска за злато”. Всеки участник прави три опита. Ако поне при два от опитите участник улучи един и същ резултат, той печели сумата от трите опита. Кой от участниците ще спечели най-голяма печалба?!

Напишете програма gold.exe, която въвежда седем реда с по три числа (по-малки от 100000). Числата на всеки ред са резултатите от трите опита на поредния състезател.

Програмата извежда номера на победителя и спечелената сума. Ако никой не улучи два пъти един и същ резултат, програмата трябва да изведе “No”. Ако двама или повече състезатели наберат еднаква сума, печели първият постигнал тази сума.
Примерен вход:

300 4444 300

224 80000 7780

5500 5500 4100

8978 9000 6789

6000 6000 3100

6000 4550 4550

2222 8980 900



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

3 15100
Примерен вход:

5300 4440 3000

224 80000 7780

5000 5500 4100

8978 9000 6700

6000 600 3100

6000 4550 47500

2200 8980 900

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

No

Задача 110: Самолет



(Национална олимпиада по информатика, Общински кръг, 27 януари 2007 г. Тема за група D (6-7 клас))

Самолет излита в К часа и М минути и пристига в L часа и N минути. Да се напише програма Plane, която намира колко часа и колко минути е летял самолетът и кое негово време (излитането или кацането) е по напред в денонощието си. Продължителността на полета е по-малка от 24 часа.

Излитането и кацането са в рамките на една и съща часова зона.

Вход: Четири цели числа на един ред разделени с интервал K M L N (0 ≤ K, L ≤ 23, 0 ≤ M, N ≤ 59 ).

Изход: Две цели числа за часове и минути за продължителността на полета на първия ред и “I” или “K” на втория ред в зависимост, от това кое е по-напред в денонощието си – излитането или кацането.

Примерен вход: 1 20 4 40

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

3 20


I

Примерен вход: 20 30 2 5

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

5 35


K

Примерен вход: 22 0 2 0

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

4 0


K

Задача 111: Бикове и крави

(Национална олимпиада по информатика, Общински кръг, 27 януари 2007 г. Тема за група E (4–5 клас))

Всеки ден в час Мартин и Иван тайно играят на “Бикове и крави”. Мартин си измисля четирицифрено число А, а Иван се опитва да го познае като предлага свое четирицифрено число В. Цифрите в числото не могат да се повтарят и числото не може да започва с цифрата нула. Когато числото на Иван съдържа цифра, която се намира на една и съща позиция в числото А и в числото В, Мартин му казва, че има “бик”, а когато цифрата от числото В не е на същата позиция в числото А, Мартин му казва, че има “крава”. Целта е Иван да познае числото на Мартин с минимален брой предложения. След това си разменят ролите и играта започва отначало. Победител е този от двамата, който е познал числото на другия с по-малък брой предложения.

Тъй като двамата не искат учителката им да разбере, че играят в час по математика, те искат да напишат програма, която да намира броя на биковете и броя на кравите на две четирицифрени числа и да играят играта в час по информационни технологии с помощта на компютър. Като пораснат още малко ще се опитат да напишат и цялата игра на компютър. Но двамата не внимават много и в школите по информатика, затова помогнете им, като напишете програма BULLCOW, която прочита от клавиатурата две четирицифрени числа и извежда на екрана броя на “биковете” и броя на “кравите”, разделени с един интервал.

Примерен вход: 1234 3245

Примерен изход: 1 2

Примерен вход: 3056 7841

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

Задача 112: Букви и цифри

 Да се напише програма TEXT, която прочита от клавиатурата 6 знака и отпечатва колка от тях са цифри, колко са малки латински букви, колко са главни латински букви и колко са други знаци.

Примери:





Пример 1

Пример 2

Пример 3

Вход

aa5B*+

a5B7c+

12345

Изход

1 2 1 2

2 2 1 1

6 0 0 0

Задача 113: Поздрав

Служителите от един офис си разменили картички за Коледа. Напишете програма pozdrav, която проверява колко пъти в даден поздрав се среща последователността 4NG изписана с малки или с главни букви от английската азбука.



Вход

На първият ред от стандартния вход се въвежда поредица от седем знака.



Изход

На един ред на стандартния изход програмата трябва да изведе колко пъти се среща последователността 4NG изписана с малки или с главни букви.



Примери:

Вход

Изход

Ab4deng

0

Abcd4ng

1

Задача 114. Новогодишен поздрав

Напишете програма POZDRAV.CPP, която въвежда от клавиатурата цяло, положително число n (3  n  23) и извежда на екрана новогодишен поздрав във вида . Буквите се “рисуват” с помощта на знака *(звездичка) по следното правило: числото n определя колко броя звездички в ред и колона ще има във всяка една от трите рисувани букви.



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

5

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

* *

* *


*****

*

*


* *

* *


*****

* *


* *
*****

*

*



*

*

Решение

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


    1. Да започнем с буквата Ч:

      • първо се отпечатват n/2 реда, съставени от *, n-2 интервала и отново *.

Всеки от тези редове се извежда на екрана по следния начин:

Отпечатва се *, след това с помощта цикъл се отпечатват n-2 интервала и отново *.

cout<<’*’;

for(i=1;i

cout<<”*\n”;

Знакът \n след последната звездичка осигурава преминаването на нов ред.

Повторението на тези редове отново се реализира с цикъл:



for(j=1;j<=n/2;j++)

{

cout<<’*’;



for(i=1 ;i

cout<<”*\n”;

}


      • следва един ред с n звездички, който отново се отпечатва с един цикъл, отброяващ от 1 до n:

for(i=1;i<=n;i++) cout<<’*‘ ;

      • отново n/2 реда, но този път съставени от n-1 интервала и завършващи със *:

for(j=1;j<=n/2;j++)

{

for(i=1 ;i

cout<<”*\n”;


    }

    1. Буквата Н се отпечатва по същия начин, но втората част е същата като първата.

for(j=1;j<=n/2;j++)

{

cout<<’*’;



for(i=1 ;i

cout<<”*\n”;

}

for(i=1;i<=n;i++) cout<<’*‘ ;

for(j=1;j<=n/2;j++)

{

cout<<’*’;



for(i=1 ;i

cout<<”*\n”;

}


    1. Най-лесно се отпечатва буквата Г:

      • един ред от n звездички(*);

for(i=1;i<=n;i++) cout<<’*‘ ;

      • n-1 реда с по една звездичка(*).

for(i=1;i

Текстът на програма изглежда така:

//pozdrav.cpp

#include



void main()

{

int n;



cin>>n;

//отпечатване на буквата Ч

for(j=1;j<=n/2;j++)

{

cout<<’*’;



for(i=1 ;i

cout<<”*\n”;

}

for(i=1;i<=n;i++) cout<<’*‘ ;



for(j=1;j<=n/2;j++)

{

cout<<’*’;



for(i=1 ;i

cout<<”*\n”;

}

//отпечатване на буквата Н

for(j=1;j<=n/2;j++)

{

cout<<’*’;



for(i=1 ;i

cout<<”*\n”;

}

for(i=1;i<=n;i++) cout<<’*‘ ;



for(j=1;j<=n/2;j++)

{

cout<<’*’;



for(i=1 ;i

cout<<”*\n”;

}

//отпечатване на буквата Г

for(i=1;i<=n;i++) cout<<’*‘ ;

for(i=1;i

}

Допълнителни задачи:

Променете програмата така, че освен променливата n да въвежда знакова променлива с и да “рисува” буквите, съставени не от звездички, а от въведения знак с.

Задача 115. Елха

Отминаха коледните празници и вече изхвърлихме от къщи поувяхналите коледни елхи. Вместо тях, нека с помощта на компютъра да си направим неувяхващи елхи. Напишете програма ELHA.EXE, която по зададено цяло число N (1N<12) рисува картинка на елхово дърво, както e показано на фигурата. Елхата трябва да има 2N+2 реда. Редовете с нечетни номера представят ствола на дървото и всеки такъв ред съдържа една звезда. Редовете с четни номера представят клоните на дървото и всеки такъв ред съдържа низ от звезди с нарастваща дължина – 1, 3, 5 и т.н. Низовете от звезди са разположени в редовете така, че средите им да са една над друга.

Числото N се въвежда от стандартния вход. На стандартния изход трябва да се изведат 2N+2 реда, по един за всеки ред на елхата.

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

1

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



*

*

* * *

*

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

2

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



*

*

* * *

*

* * * * *

*

Решение

Ако номерираме редовете на елхата отгоре надолу, можем да забележим, че броя на звездичките, които образуват елхата зависят от номера на реда, на който се намират. На четните редове има по една звездичка, разположена в средата на елхата, т. е. На разстояние N интервала от началото на реда. На нечетните редове има толкова звездички колкото е номера на реда. Освен това на всеки от нечетните редове се оставят различен брой интервали. На първия ред те са N и след това намаляват с 1 за всеки нечетен ред. Ето защо ще отпечатаме елхата като отпечатаме 2*N+2 реда по следния начин:

За всеки ред i се проверява дали е четен или не и


  1. ако редът i е четен, се отпечатват N интервала и след тях една *;

for(j=1; j<=N;j++) cout<<’ ‘;cout<<”*\n”;

  1. ако редът i е нечетен, се отпечатват L интервала, и след това i звездички. На първия ред числото L е равно на N и след всеки нечетен ред стойността му се намалява с 1.

for(j=1; j<=L;j++) cout<<’ ‘;

for(j=1; j<=i;j++) cout<<’*‘;

cout<<”\n”;

L--;

След всичко казано до тук можем да напишем цялата програма:



//elha.cpp

#include



void main()

{

int N, L, i, j;



cin>>N; L=N ;

for(i=1;i<=2*N+2;i++)

{

if(i%2) //редът е нечетен



{

for(j=1; j<=N;j++) cout<<’ ‘;

cout<<”*\n”;



    }

else //редът е четен

{

for(j=1; j<=L;j++) cout<<’ ‘;

for(j=1; j<=i;j++) cout<<’*‘;

cout<<”\n”;

L--;


    }

}

}

Допълнителни задачи:

Променете програмата така, че освен променливата N да въвежда знакова променлива с и да “рисува” елхата, съставена не от звездички, а от въведения знак с. Например, ако за стойност на с е въведен знака #, а за N числото 3, то елхата ще изглежда по следния начин:

#

#



# # #

#

# # # # #



#

# # # # # # #

#

Задача 116. Триъгълници

Нека N е зададено число, не по-малко от 3 и не по-голямо от 20. Задачата Ви е да напишете програма THREE.EXE, която въвежда от клавиатурата числото N и някакъв друг знак и след това извежда на екрана на компютъра равностранен триъгълник, всяка от страните на който се състои от N пъти въведения от клавиатурата знак, така както е показано на примерите.



Решение

Задачата е подобна на предходната. Тук по различен начин се отпечатват първият и последният ред. При това на първия ред се отпечатват N/2 интервала и един знак с, а на последния ред се отпечатват N знака с. Останалите редове са подобни, като на всеки от тях се отпечатват N-i интервала, след това един знак с, след него още i интервала и след това още един знак с. Програмата има следния общ вид:

//tree.cpp

#include



void main()

{

int N, i, j; char c;



cin>>N>>c ;

//отпечатва се първия ред

for(i=1;i<=N/2;i++) cout<<’ ‘; cout<

//отпечатват се редовете от втория до предпоследния

for(i=2;i<=N-1;i++)

{

for(j=1; j<=N-i;j++) cout<<’ ‘;//отпечатват се N-i интервала



cout<

for(j=1; j<=i;j++) cout<<’ ‘;//отпечатват се i интервала

cout<


    }

    for(i=1;i<=N;i++) cout<

}

Задача 117. Звезди

Да се въведат от клавиатурата числата  M  и  и  да се изведат на екрана един до друг N  квадрата, всеки със страна от M звездички. Например при  M=5 и  N=3 трябва да се получи следната картина:

* * * * * * * * * * * * *

* *     *     *

*  *     *     *

*     *   *   *

* * * * * * * * * * * * *

Забележка:  Между съседните хоризонтални звездички да има по един интервал.

Име на програмата:    ZVEZDI.EXE

Решение

Макар, че е подомна на предишните, в тази задача се изисква малко повече пресмятане. Веднага става ясно, че първия и последния ред ще са различни от останалите. Те ще съдържат само звездички, но какъв ше бъде техния брой се определя от изискванията в условието. В примера се вижда, че квадратите, които отпечатваме имат общи страни. Ето защо броя на звездичките е N*M-(M-2) – първо отчитаме по М звездички за всеки от N-те квадрата и след това изваждаме повтарящите се от общите страни. Останалите редове са точно М-2 и са еднакви, като за всеки от тях се повтаря N пъти отпечатване на * и след нея М-2 интервала. Тъй като условието изисква след всяка звездичка да има интервал, след всеки от описаните знаци, ще отпечатваме по един интервал. Всеки такъв ред завършва със * и знак за нов ред.

В крайна сметка отпечатването на квадратите ще се осъществи във следния ред:


    1. Прочитат се числата М и N.

cin>>M>>N;

    2. Отпечатва се един ред, съдържащ N*M-(M-2) броя звездички, отделени с интервали:

k= N*M-(M-2);

for(i=1;i<=k;i++) cout<<”* “;cout<

    3. Отпечатват се М-2 реда, за всеки, от които се повтарят по N пъти отпечатване на * и след нея М-2 интервала:

for(i=1;i<=M-2;i++)

    {

    for(j=1;j<=N;j++)

    {

    cout<<”* “;



    for(l=1;l<=M-2;l++) cout<<” “;

    //в кавичките се отпечатват 2 интервала

    }

    cout<<”*\n”;



    }

    4. Отпечатва се един ред, съдържащ N*M-(M-2) броя звездички, отделени с интервали:



for(i=1;i<=k;i++) cout<<”* “;cout<Пълният текст на програмата е следният:

//zvezdi.cpp

#include



void main()

{

int M,N, i, j, k, l;



cin>>M>>N ;

//отпечатва се първия ред

k= N*M-(M-2);



for(i=1;i<=k;i++) cout<<”* “;cout< // Отпечатват се М-2 реда



for(i=1;i<=M-2;i++)

    {

    for(j=1;j<=N;j++)

    {

    cout<<”* “;



    for(l=1;l<=M-2;l++) cout<<” “;

    //в кавичките се отпечатват 2 интервала

    }

    cout<<”*\n”;



    }

//отпечатва се последния ред

for(i=1;i<=k;i++) cout<<”* “;cout<

}

Задача 118. Шахматен кон

Дадени са два символа- латинска буква (от a до h) и цифра (от 1 до 8),  например g5. Разглеждайки ги като координати на поле от шахматна дъска, на която е разположен кон, да се отпечата шахматната дъска като с H се бележи позицията на коня, с Х се отбележат полетата, които "бие" шахматния кон и с О останалите полета. Напишете програма  horse.exe, която въвежда два символа определящи позицията на шахматния кон и извежда на екрана именуваната шахматна дъска по указания по-горе начин.

Пример:

Вход: d5                                         

Изход:

  a b c d e f g h

1 O O O O O O O O

2 O O O O O O O O

3 O O X O X O O O

4 O X O O O X O O

5 O O O H O O O O

6 O X O O O X O O

7 O O X O X O O O

8 O O O O O O O O

 

Забележка: Ако d4е позицията на шахматния кон (отбелязана с H)  с числата от 1 до 8 са посочени полетата, които "бие" коня по правилата на шаха. Няма значение реда на ходовете.





Решение

Тази задача отново организира отпечатване на фигура, зависеща от дадено условие. Преди да организираме отпечатването, трябва да се изчисли на коя колона като номер съответства въведената от клавиатурата буква. Тъй като номерирането на колоните започва от буквата а и кодовете на латинските букви са подредени последователно, то ако от стойността на въведената буква извадим кода на буквата а, ще получим цяло число, съответстващо на номера на колоната. Трябва да отбележим, че пресметнати по този начин, номерата на колоните започват от 0 и затова е по-добре да се прибави 1. След това се обхождат всички клетки на дъската по редове и за всяка от тях се проверява дали се заплашва от коня, като при това се отпечатва нужният знак.

И така, решението на задачата започва с точното определяне на мястото на коня, като координатите му се записват в две целочислени променливи: Hx и Hy, като номера на колоната е Hy, а номера на реда е Hx.


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

  • за координатите на коня: int Hx, Hy;

  • за буквата, която се въвежда в началото на програмата, за да определи колоната на коня: char c;

  • две променливи, чрез които се обхождат всички позиции на дъската, за да се отпечата съответния знак: int i,j;

  1. Въвеждат се буквата с и цялото число Нх.

cin>>c>>Hx;

  1. Пресмята се номера на колоната на коня

Hy=c-‘a’+1;

  1. Отпечатва се реда, който изписва името на колоните.

cout<<” abcdefgh\n”

  1. Обхожда се таблицата по редове и колони, като преди всеки ред се от белязва номера му.

for(i=1; i<=8; i++)

{

cout<


for(j=1; j<=8; j++)

    {

//за всяка клетка се проверява дали коня от

// позиция с координати Нх и Ну я заплашва

if(i==Hx&&j==Hy) cout<<’H’;

//проверка дали в тази клетка е конят

else

if(i==Hx-2&&j==Hy+1||i==Hx-2&&j==Hy-1|| i==Hx+2&&j==Hy+1||i==Hx+2&&j==Hy-1||i==Hx+1&&j==Hy-2||i==Hx-1&&j==Hy-2||i==Hx+1&&j==Hy+2||i==Hx-1&&j==Hy+2||) cout<<’X’;

else cout<<’O’;


    }

//във втория оператор if се проверява дали клетката е заплашена от коня,

//т.е. дали не е една от тези номерирани с числата от 1 до 8 в схемата

cout<


    }

    Окончателния вид на програмата е следния:



//horse.cpp

#include



void main()

{

int Hx, Hy, i, j;



char c;

cin>>c>>Hx;

Hy=c-‘a’+1;

cout<<” abcdefgh\n”



for(i=1; i<=8; i++)

{

cout<




Сподели с приятели:
1   2   3   4   5




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

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