Примеры решения типовых задач

Задача 2.1. Программа позволяет угадать возраст Вашего дедушки, который может находиться в интервале от 45 до 109 лет.

#include <iostream>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

int high,mid,low,k=1,year,found;

char ch;

setlocale (NULL, ".1251");

// установить базовое число для генератора случайных чисел

srand((unsigned)time(NULL));

// Функция rand() генерирует псевдосучайные числа

// от 0 до RAND_MAX (RAND_MAX=32767), которые далее

// преобразуются к требуемому диапазону

do

{

found = 0;

low = rand()%10 + 45; cout << "min="<<low<<endl;

high = rand()%30 + 80;cout << "max="<<high<<endl;

cout<<"Хотите, я угадаю, сколько лет "<<endl;

cout<<"(от "<<low<<" до "<<high<<" ) Вашему дедушке(y/n)"<<endl;

k=1; ch=_getch(); if(ch != 'y' && ch != 'Y')break;

// Для поиска применен метод дихотомии (половинного деления

// интервала)

while (low<=high && !found)

{

mid = (low+high)/2;

cout<<"Вашему дедушке "<<mid<<" лет(y/n)?";

cin>>ch;

if (ch == 'y' || ch == 'Y')

{

cout<<"\n Ура! Я угадал за "<<k<<" попыток";

found = 1;

}

else

{

m2: cout<<"Больше(>) или меньше(<)? ";

cin>>ch;

if (ch == '>')

low = mid+1;

else if (ch=='<')

high=mid-1;

else

{

cout<<"Нажмите Shift+знак(< или >)"<<'\n';

goto m2;

}

k++;

}

}

cout<<"\n\n Еще(y/n)? ";

ch=_getch();

}

while(ch=='y' || ch=='Y');

return 0;

}

Задача 2.2. Есть отрезки труб длиной a метров и b метров (a < b). Сколько тех и других потребуется, чтобы проложить трубопровод заданной длины T с минимальным числом сварных швов? (Трубы разрезать нельзя!).

Замечание. Задача всегда имеет решение при a=3, b=5, если T>7.

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

int t3,t5,T; int a=3, b=5;

setlocale (NULL, ".1251");

printf("длина трубопровода?"); cin>>T;

t3=0;

while(t3<=T/a)

{

t5=(T-a*t3)/b;

if(a*t3+b*t5 == T)

{cout<<a<<"-м: "<<t3<<endl;

cout<<b<<"-м: "<<t5<<endl;

break;

}

else

t3++;

}

if(t3>T/a)

cout<<"Нельзя построить";

_getch(); return 0;

}

Задача 2.3. Программа реализует правило, согласно которому покупателю с 1 гривны всегда выдаётся сдача наименьшим количеством монет. Например, если стоимость покупки 24 коп., то продавец, руководствуясь этим правилом, должен дать сдачу набором монет: 50, 25, 1.

#include <stdio.h>

#include <conio.h>

#include <iostream>

using namespace std;

int main()

{ int t, s;

setlocale (NULL, ".1251");

while(1)

{

printf("Сколько стоит покупка?");

scanf("%d",&s);

if(s >= 0 && s <= 100) break;

}

t = 100-s;

printf("Вот ваша сдача:");

while (t>=50)

{ t-=50; printf(" 50 "); }

while (t>=25)

{ t-=25; printf(" 25 "); }

while (t>=10)

{ t-=10; printf(" 10 "); }

while (t>=5)

{ t-=5; printf(" 5 "); }

while (t>=2)

{ t-=2; printf(" 2 "); }

while (t>=1)

{ t-=1; printf(" 1 "); }

getch(); return 0;

}

Задача 2.4. Заданное натуральное число М разложить на простые натуральные множители. Так, если М = 5784, то результат должен быть таким: 5784=1*2*2*2*3*241

#include <stdio.h>

#include <conio.h>

#include <iostream>

using namespace std;

int main()

{

int i,M;

setlocale (NULL, ".1251");

printf("введи М ");

scanf("%d",&M);

printf("%d =1",M);

for( ; M%2==0; M/=2)

printf("*2");

for( i=3; i <= M; )

if(M%i == 0)

{ printf("*%d",i); M/=i; }

else

i+=2;

getch(); return 0;

}

Задача 2.5. Изобразить показанный ниже равнобедренный треугольник заданной высоты Н, заполненный символом ª (код 05). Вершина фигуры должна находиться в 40-й колонке экрана.

ª

ªªª

ªªªªª

ªªªªªªª

ªªªªªªªªª

ªªªªªªªªªªª

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{

int k, h, x, y;

setlocale (NULL, ".1251");

cout<<"Введи высоту треугольника ==> ";

cin>>h;

for(y=1; y<=h; y++)

{

for (x=0; x <= 40 - y; x++)

cout<<" ";

for ( k=1; k<=2*y-1; k++)

cout<<'\05';

cout<<endl;

}

_getch(); return 0;

}

Наши рекомендации