Помощничек
Главная | Обратная связь


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

Елементи комбінаторики, а саме: «сполучення», згідно з програмою вивчатимуться лише в 10-му класі



//варіант 12 №17

 

#include ‹string›

 

#include ‹iostream› using namespace std;

bool palindrom(string);//функція визначення паліндрома

 

int main()

 

{

 

string s;

 

getline(cin,s);//уведення рядку

 

//підрахунок кількості слів в реченні

 

int N=0;

 

for (unsigned i=0; i‹s.length(); i++)

 

{


 

 

if (s[i]!=' '&&(i+1==s.length()||s[i+1]==' ')) N++;

}

 

//створення масиву M з N слів

 

string *Ms, Sm;

 

Ms = new string [N];

 

unsigned ip, ic=0;

 

for (int k=0; k‹N; k++)

 

{

 

Sm="";

 

for (ip=ic; ip‹s.length()&&s[ip]==' '; ip++);

 

for (ic=ip; ic‹s.length()&&s[ic]!=' '; ic++) Sm+=s[ic];

Ms[k]=Sm;

 

}

 

int *arr = new int [N];//масив коефіцієнтів

 

int i,j,P=0; string ss="";

//перебір комбинацій (сполучень з N по M) for (int M=1; M‹=N; M++)

{

 

for (i = 0; i ‹ M; i++) arr [i] = i;

do

 

{

 

for (i = 0; i ‹ M; i++)

 

ss=ss+Ms[arr[i]]; if(palindrom(ss))

{

 

cout ‹‹ ss ‹‹ endl; P++;

}

 

ss="";


 

 

for ( j = M ‐1 ; j ›=0 && arr [j] ›= N ‐ M + j; j‐‐) ; if ( j ›= 0)

{

 

arr[j] ++;

 

for (i = j + 1; i ‹ M; i++) arr [i] = arr [i‐1] + 1;

}

 

else break;

 

}

 

while (true);

 

}

 

cout ‹‹P‹‹endl;

 

system ("pause"); return 0;

}

 

//функція визначення паліндрома

 

bool palindrom(string S)

 

{

 

int k,s; s=S.length();

 

 

for (k=0; k‹s/2; k++)

 

if (tolower(S[k])!=tolower(S[s‐k‐1])) break;

 

 

if (k!=s/2)

 

return false;

 

else

 

return true;

 

}

 

 

ВАРІАНТ 13


Дано A, B, C, D – чотири точки на площині, що задані своїми координатами XA,YA,XB,YB,XC,YC,XD,YD. Запишіть програму для визначення трійок точок, що утворюють трикутники. Виведіть на екран координати точок, які утворюють трикутник найбільшої площі, та значення цієї площі. Якщо неможливо отримати жодного трикутника, відповідь – 0.

Довідка.

Довжину відрізка між двома точками A1(x1; y1) i A2(x2; y2) знаходять за формулою A1A2=sqrt((x2- xj)2+(y2- y1)2. Площу трикутника можна знайти за формулою Герона: SABC=sqrt(р(р — а)(р — Ь)(р — с)), де a, b, c – довжини сторін трикутника, p – його півпериметр.

 

//варіант 13 №17

 

#include ‹cmath›

 

#include ‹iostream› using namespace std; int main()

{

 

double X[4],Y[4]; for(int i=0; i‹4; i++) cin ›› X[i] ›› Y[i];

 

 

double maxS = 0;//maxS ‐ максимальна площа

 

int a,b,c,I=0,J=0,Z=0;

 

double p,s;//р ‐ півпериметр, s ‐ площа

 

for(int i=0; i‹4; i++) for(int j=i+1; j‹4; j++)

for(int z=j+1; z‹4; z++)

 

{

 

a=sqrt(pow((X[i]‐X[j]),2)+pow((Y[i]‐Y[j]),2));

 

b=sqrt(pow((X[z]‐X[j]),2)+pow((Y[z]‐Y[j]),2));

 

c=sqrt(pow((X[i]‐X[z]),2)+pow((Y[i]‐Y[z]),2));

 

//cout ‹‹a‹‹" "‹‹b‹‹" "‹‹c‹‹ endl; if(a‹b+c&&b‹a+c&&c‹a+b)//якщо трикутник можливий

{

 

p=(a+b+c)/2; s=sqrt(p*(p‐a)*(p‐b)*(p‐c)); if(s›maxS)

{

 

maxS=s;


 

 

I=i;J=j;Z=z;

 

}

 

}

 

}

 

if(I+J+Z)

 

cout ‹‹ "S=" ‹‹ maxS ‹‹ endl

 

‹‹ "Xa=" ‹‹ X[I] ‹‹ " Ya=" ‹‹ Y[I] ‹‹ endl

 

‹‹ "Xb=" ‹‹ X[J] ‹‹ " Yb=" ‹‹ Y[J] ‹‹ endl

 

‹‹ "Xc=" ‹‹ X[Z] ‹‹ " Yc=" ‹‹ Y[Z] ‹‹ endl;

 

else

 

cout ‹‹ 0 ‹‹ endl;

 

system ("pause"); return 0;

}

 

 

ВАРІАНТ 14

Запишіть програму формування та виведення двовимірного масиву A розміру N × N, що містить N2 елементів (3 ≤ N

20). Елементами масиву є натуральні числа від 1 до N2, що розташовані в порядку зростання відповідно до наведеної схеми. Наприклад, для N = 5 масив буде заповнено так:

1 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

ЗАУВАЖЕННЯ: Оскільки не вказано як задається значення N, задаватимемо його програмно, як константу.

//варіант 14 №17

 

#include ‹iostream›

 

#include ‹iomanip› using namespace std; int main()

{

 

// 1 2 3 4 5

 

// 16 17 18 19 6

 

// 15 24 25 20 7

 

// 14 23 22 21 8


 

 

// 13 12 11 10 9

 

const int N=5; double A[N][N]={};

int c=1; int p=0;

//p проходів по колу (витків спіралі + останнє число) for (; p‹N/2+1; p++)

{

 

//верхній рядок

 

for ( int i = 0+p; i ‹ N‐1‐p; i++ )

 

{

 

A[0+p][i]=c++;

 

}

 

//правий стовбець

 

for ( int i = 0+p; i ‹ N‐1‐p; i++ )

 

{

 

A[i][N‐1‐p]=c++;

 

}

 

//нижній рядок

 

for ( int i = N‐1‐p; i ›0+p; i‐‐ )

 

{

 

A[N‐1‐p][i]=c++;

 

}

 

//лівий стовбець

 

for ( int i = N‐1‐p; i ›0+p; i‐‐ )

 

{

 

A[i][0+p]=c++;

 

}

 

}

 

//центр, якщо К‐непарне

 

if (N%2!=0)

 

A[p‐1][p‐1]=c++;


 

 

//выведення

 

for(int i=0; i‹N; i++)

 

{

 

cout ‹‹ endl;

 

for(int j=0; j‹N; j++)

 

cout ‹‹ setw(4) ‹‹ A[i][j];

 

}

 

system ("pause"); return 0;

}

 

 

ВАРІАНТ 15

Паліндромом називається слово, словосполучення або речення, що однаково читається в обох напрямах (зліва направо та справа наліво). Наприклад, «А роза упала на лапу Азора», «Пилип». Запишіть програму для підрахунку кількості паліндромів, які можна створити з введеного речення, відкидаючи зайві слова з правого або (та) лівого країв речення.

Виведіть кількість паліндромів і всі утворені паліндроми. Наприклад, речення — «А роза упала на лапу Азора»; кількість паліндромів — 3; паліндроми: «А роза упала на лапу Азора», «упала на лапу», «А».

// варіант 15 №17

 

#include ‹string›

 

#include ‹iostream› using namespace std;

bool palindrom(string); //функція визначення паліндрома

 

int main()

 

{

 

string SS; getline(cin,SS);

 

 

//підраховуємо кількість слів в рядку

 

int n=0;

 

for (unsigned i=0; i‹SS.length(); i++)


 

 

{

 

if (SS[i]!=' '&&(i+1==SS.length()||SS[i+1]==' ')) n++;

}

 

//створюємо масив слів

 

string *MS, Sm;

 

MS = new string [n];

 

unsigned ip, ic=0;

 

for (int k=0; k‹n; k++)

 

{

 

Sm="";

 

for (ip=ic; ip‹SS.length()&&SS[ip]==' '; ip++);

 

for (ic=ip; ic‹SS.length()&&SS[ic]!=' '; ic++) Sm+=SS[ic];

MS[k]=Sm;

 

}

 

//видаляємо слова ліворуч‐праворуч в різних комбінаціях

 

//та визначаємо паліндромність речення, що залишилось

 

setlocale (0,"");

 

cout ‹‹ "\nпалiндроми:" ‹‹ endl; setlocale (0,".OCP");

int N=0,q,w;

 

for (q=0; q‹n; q++)

 

{

 

for (w=n; w›q; w‐‐)

 

{ Sm="";

for (int f=q; f‹w; f++) Sm=Sm+MS[f];

 

 

if (palindrom(Sm))

 

{

 

N++;


 

 

for (int f=q; f‹w; f++) cout ‹‹ MS[f] ‹‹ " "; cout ‹‹ endl;

}

 

}

 

}

 

setlocale (0,"");

 

cout ‹‹ "\nкiлькiсть палiндромiв: " ‹‹ N ‹‹ endl;

 

system ("pause"); return 0;

}

 

//функція визначення паліндрома

 

bool palindrom(string S)

 

{

 

int k,s; s=S.length();

 

 

for (k=0; k‹s/2; k++) //tolower – нижній регістр

 

if (tolower(S[k])!=tolower(S[s‐k‐1]))// перевірка симетричності

 

break;

 

if (k!=s/2)

 

return false;

 

else //якщо усі сиволи слова симетрично однакові

 

return true;

 

}

 

ВАРІАНТ 16

Запишіть програму формування та виведення двовимірного масиву A розміру N × N, що містить N2 елементів (3‹= N ‹= 20). Елементами масиву є натуральні числа від 1 до N2, що розташовані в порядку зростання відповідно до наведеної схеми. Наприклад, для N = 5 масив буде заповнено так:

1 2 3 4 5

10 9 8 7 6


11 12 13 14 15

20 19 18 17 16

21 22 23 24 25

ЗАУВАЖЕННЯ: N задаватимемо програмно, як константу.

//варіант 16 №17

 

#include ‹‹iostream››

 

#include ‹‹iomanip›› using namespace std; int main()

{

 

//1 2 3 4 5

 

//10 9 8 7 6

 

//11 12 13 14 15

 

//20 19 18 17 16

 

//21 22 23 24 25

 

const int N=5; int A[N][N];

 

 

//ініціалізація масиву

 

int p=1; //з якого числа починаємо заповнювати

 

for (int i=0; i‹N; i++)//заповнюємо рядки зверху‐донизу

 

if (i%2==0) //парні рядки заповнюємо зліва‐направо

 

for(int j=0; j‹N; j++)

 

{

 

A[i][j] = p; p++;

}

 

else //непарні рядки заповнюємо зправа‐наліво

 

for(int j=N‐1; j›=0; j‐‐)

 

{

 

A[i][j] = p; p++;

}

 

//виведення таблиці

 

for (int i=0; i‹N; i++)


 

 

{

 

for(int j=0; j‹N; j++)

 

cout ‹‹ setw(4) ‹‹ A[i][j]; cout ‹‹ endl‹‹ endl;

}

 

system ("pause"); return 0;

}

 

//варіант 16 №17 спрощений

 

#include ‹iostream›

 

#include ‹iomanip›

 

#include ‹cmath› using namespace std; int main()

{

 

int N = 5;

 

for (int i=0; i‹N; i++)

 

{

 

for(int j=0; j‹N; j++)

 

cout ‹‹ i*N+(!(i%2)?j+1:N‐j) ‹‹" ";

 

cout ‹‹ endl;

 

}

 

system ("pause"); return 0;

}

 

 

ВАРІАНТ 17

Паліндромом називається слово, словосполучення або речення, що однаково читається в обох напрямах (зліва направо та справа наліво). Наприклад, «А роза упала на лапу Азора», «Пилип». Запишіть програму, що перевіряє, чи буде

Введене речення паліндромом (слова в реченні розділені пробілом), та залежно від відповіді «Так» чи «Ні» виведіть відповідне речення: «Це паліндром.» зеленим кольором, або «Це не паліндром.» червоним кольором.

//варіант 17 №17


 

 

#include ‹string›

 

#include ‹iostream› using namespace std;

 

 

int main()

 

{

 

string SS; getline(cin,SS);

 

 

//видаляємо пробіли

 

string S="";

 

for (int i=0; i‹SS.length(); i++) if (SS[i]!=' ')

S+=SS[i];

 

//перевіряємо на паліндромність, посимвольно

 

//порівнюючи ліву та праву частину слова S int k,s;

s=S.length();

 

setlocale (0,".OCP");//кодування для введення кирилиці; for (k=0; k‹s/2; k++)

if (tolower(S[k])!=tolower(S[s‐k‐1])) break;

setlocale (0,"");//кодування для виведення кирилиці

 

cout ‹‹ "Це ";

 

if (k!=s/2)

 

{

 

cout ‹‹ "не "; system ("color 0c");

}

 

else

 

system ("color 0a"); cout ‹‹ "палiндром" ‹‹ endl;

 

 

system ("pause"); return 0;


 

 

}

 

 

ВАРІАНТ 18

Запишіть програму формування та виведення двовимірного масиву A розміру N × N, що містить N2 елементів (3 ≤ N ≤ 20). Елементами масиву є натуральні числа від 1 до N2, що розташовані в порядку спадання відповідно до наведеної схеми.

Наприклад, для N = 5 масив буде заповнено так:

25 24 23 22 21

16 17 18 19 20

15 14 13 12 11

6 7 8 9 10

5 4 3 2 1

ЗАУВАЖЕННЯ: N задаватимемо програмно, як константу.

//варіант 18 №17

 

#include ‹iostream›

 

#include ‹iomanip› using namespace std; int main()

{

 

const int N=5; int A[N][N];

 

 

int p=1;

 

for (int i=N‐1; i›=0; i‐‐) if (i%2!=0)

for(int j=0; j‹N; j++)

 

{

 

A[i][j] = p; p++;

}

 

else

 

for(int j=N‐1; j›=0; j‐‐)

 

{

 

A[i][j] = p; p++;

}


 

 

for (int i=0; i‹N; i++)

 

{

 

for(int j=0; j‹N; j++)

 

cout ‹‹ setw(4) ‹‹ A[i][j]; cout ‹‹ endl‹‹ endl;

}

 

system ("pause"); return 0;

}

 

 

ВАРІАНТ 19

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

ЗАУВАЖЕННЯ: Для спрощення вводитимемо назви місяців англійською мовою.

Період Знак зодіаку
21.01–18.02 Водолій
19.02–20.03 Риби
21.03–20.04 Овен
21.04–21.05 Тілець
22.05–21.06 Близнюки
22.06–22.07 Рак
23.07–23.08 Лев
24.08–23.09 Діва
24.09–23.10 Терези
24.10 –22.11 Скорпіон
23.11–21.12 Стрілець

//варіант 19 №17

 

#include ‹iostream›

 

#include ‹string› using namespace std; int main ()

{

setlocale (0,""); string

Z[]={"Водолiй","Риби","Овен","Тiлець","Близнюки","Рак","Лев","Дiва","Терези","Скорпiон","Стрiлець","Козерiг"};

 

int D,z; string M;

cout ‹‹ "Введiть день та назву мiсяця\n(англiйською: January, February,"

 

‹‹" March, April, May, June, July, August, September, October, November, December" ‹‹ endl; cin ›› D ›› M;

 

 

if ((D›=21 && M=="January") ||(D‹=18 && M=="February")) z=0; else if ((D›=19 && M=="February") ||(D‹=20 && M=="March")) z=1; else if ((D›=21 && M=="March") ||(D‹=20 && M=="April")) z=2; else if ((D›=21 && M=="April") ||(D‹=21 && M=="May")) z=3; else if ((D›=22 && M=="May") ||(D‹=21 && M=="June")) z=4; else if ((D›=22 && M=="June") ||(D‹=22 && M=="July")) z=5; else if ((D›=23 && M=="July") ||(D‹=23 && M=="August")) z=6; else if ((D›=24 && M=="August") ||(D‹=23 && M=="September")) z=7; else if ((D›=24 && M=="September")||(D‹=23 && M=="October")) z=8; else if ((D›=24 && M=="October") ||(D‹=22 && M=="November")) z=9; else if ((D›=23 && M=="November") ||(D‹=21 && M=="December")) z=10; else if ((D›=22 && M=="December") ||(D‹=20 && M=="January")) z=11;

 

 

cout ‹‹ Z[z] ‹‹ endl;

 

system ("pause"); return 0;


 

 

}

 

 

ВАРІАНТ 20

Запишіть програму формування та виведення двовимірного масиву A розміру N × N, що містить N2 елементів (3 ‹= N ‹=

20) . Елементами масиву є натуральні числа від 1 до N2, що розташовані в порядку спадання відповідно до наведеної схеми. Наприклад, для N = 5 елементи масиву будуть заповнені так:

25 24 23 22 21

7 20
6 19
5 18
16 17

ЗАУВАЖЕННЯ: N задаватимемо програмно як константу.

//варіант 20 №17

 

#include ‹iostream›

 

#include ‹iomanip› using namespace std; int main()

{

 

// 25 24 23 22 21

 

// 10 7 20
// 11 6 19
// 12 5 18
// 13 16 17

const int N=5; double A[N][N]={0};

 

 

int c=N*N;

 

int p=0;

 

//p проходів по колу (витків спіралі + останнє число) for (; p‹N/2+1; p++)

{

 

//верхній рядок

 

for ( int i = 0+p; i ‹ N‐1‐p; i++ )

 

{

 

A[0+p][i]=c‐‐;


 

 

}

 

//правий стовбець

 

for ( int i = 0+p; i ‹ N‐1‐p; i++ )

 

{

 

A[i][N‐1‐p]=c‐‐;

 

}

 

//нижній рядок

 

for ( int i = N‐1‐p; i ›0+p; i‐‐ )

 

{

 

A[N‐1‐p][i]=c‐‐;

 

}

 

//лівий стовбець

 

for ( int i = N‐1‐p; i ›0+p; i‐‐ )

 

{

 

A[i][0+p]=c‐‐;

 

}

 

}

 

//центр, якщо К ‐ непарне

 

if (N%2!=0)

 

A[p‐1][p‐1]=c‐‐;

 

 

//виведення

 

for(int i=0; i‹N; i++)

 

{

 

cout ‹‹ endl;

 

for(int j=0; j‹N; j++)

 

cout ‹‹ setw(4) ‹‹ A[i][j];

 

}

 

system ("pause"); return 0;


 

 

}

 

або так:

 

//варіант 20 №17 (спрощене рішення)

 

#include ‹iostream› using namespace std; int main()

{

 

int N=5;

 

for (int i=N‐1; i›=0; i‐‐)

 

{

 

for(int j=0; j‹N; j++)

 

cout ‹‹ i*N+(!(i%2)?j+1:N‐j) ‹‹" ";

 

cout ‹‹ endl;

 

}

 

system ("pause"); return 0;

}

 

Обновлено ( 07.05.2014 09:10 )

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.