Сайт підготовки до олімпіади з інформатики

програмування в С++

Школа олімпійського резерву з інформатики
Заняття 30.09.2015 PDF Печать E-mail
Добавил(а) Administrator   
30.09.15 09:18

1.      Методика складання алгоритмів

Розв’язати і протестувати задачі в системі (http://134.249.159.199/cgi-bin/new-client?contest_id=24)

Логін user1-user10(пароль - 1)

Тематика задач:

$1-          Довга арифметика

$1-          Системачислення

$1-          Сортування, пошук

$1-          Перебір

$1-          Бінарні дерева

$1-          Графи (пошук, жадібні, динамічне)

$1-          Обчислювальна геометрія

2.      Змагання сортування http://www.e-olymp.com/ru/contests/5852

Теорія

Методи сортування:

$11)      Бульбашка

$12)      Вибір максимального (мінімального)

$13)      Швидке

$14)      Вектором

Сортування

Перестановки

#include<iostream>

#include<algorithm>

#include<vector>

using namespace std;

int i,j,n;

int main()

{cin>>n;

vector<int> a(n);

for (int i=0;i<n;i++) cin>>a[i];

sort(a.begin(),a.end());

for (i=0; i<n-1; i++) cout<<a[i]<<" ";

cout<<a[n-1]<<"\n";

 return 0;

}

#include<iostream>

#include<algorithm>

#include<vector>

using namespace std;

vector<int> a;

int n;

int main()

{cin>>n;

for (int i=1;i<=n;i++) a.push_back(i);

for (int i=0; i<n-1; i++) cout<<a[i]<<" ";

cout<<a[n-1]<<"\n";

 while (next_permutation(a.begin(),a.end()))

{for (int i=0;i<n-1;i++)cout << a[i] << " ";

  cout<<a[n-1]<<"\n";

}

 return 0;

}

 
Опорний конспект PDF Печать E-mail
Добавил(а) Administrator   
06.12.16 16:07

Опорний конспект по с++

Завдання

Програмний код

 

$11.                  

Структура програми

#include "iostream"
#include <math.h>
using namespace std;
int main()
{
double a,b,c;
cin>>a>>b;
c=a/b;
cout.precision(2);
cout<<fixed<<c<<endl;
}

Заокруглення

double r;
cout.precision(2);
cout<<fixed<<r<<endl;

Робота з файлами

#include "fstream"

using namespace std;

ifstream cin("input.txt");

ofstream cout("output.txt");

 

$12.                  

Заокруглення кількості знаків після коми

double a;   a=3.14

cout.precisio(2);

cout<<fixed<<a<<endl;

 

$13.                  

Обчислити площу трикутника за координатами

#Include “iostream”;

#Include “math.h”;

using namespace std;

int mail()

{double x1,y,x2,y2,x3,y3,a,b,c,p,s;

cin>>x1>>y1>>x2>>y2>>x3>>y3;

a=sqrt(pow(x2-x1,2)+pow(y2-y1,2));

b=sqrt(pow(x3-x2,2)+pow(y3-y2,2));

c=sqrt(pow(x3-x1,2)+pow(y3-y1,2));

p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c));

cout.precisio(2);

cout<<fixed<<s<<endl;

}

 

$14.                  

Зчитати n чисел

int  n,a[1000];

cin>>n;

for(i=0;i<n;i++) cin>>a[i];

 

$15.                  

Зчитати рядок з n чисел

int  n,a[1000];

n=0;

while (! cin.eof())

{cin>>a[n];  n++;

}

 

$16.                  

Зчитати рядок цифр і вивести його в зворотному порядку

char  a[1000];

cin>>a;

for(int i=strlen(a)-1; i>=0;i--)cout<<a[i];

 

$17.                  

Вивести масив з n чисел через пропуск

for(int i=0;i<n-1;i++)cout<<a[i]<<” “;

cout<<a[n-1[<<endl;

 

$18.                   1

Підрахувати суму цифр в числі

long long n,s;

cin>>n;

s=0;

while (n>0) {

s=s+n%10;

n=n/10;

}

char a[1000];

cin>>a;

int s=0;

for(int i=0;i<strlen(a);i++)

s=s+a[i]-48;

cout<<s<<endl;

 

$19.                  

Підрахувати кількість кожної цифри в числі

long long n;

cin>>n;

int a[10]

while (n>0)

{a[n%10]++;

n=n/10;

}

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

cout<<i<<” “<<a[i]<<endl;

char a[1000];

cin>>a;

int b[10];

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

for(int i=0;i<strlen(a);i++)

b[a[i]-48]++;’

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

cout<<i<<” “<<b[i]<<endl;

 

$110.               

Відсортувати масив в порядку зростання

#include <iostream>

#include <algorithm>

int a[100],n;

using namespace std;

int main()

{cin>>n;

for(int i=0;i<n;i++)cin>>a[i];

sort(a,a+n);

for(int i=0;i<n;i++)cout<<a[i]<<" ";

    cout <<endl;

    return 0;

}

int a[100000], j, i;

cin>>n;

for (i=0; i<n; i++)cin>>a[i];

for (i=0;i<n-1;i++)

  for (j=0;j<n-1;j++)

 if (a[j]>a[j+1])

swap(a[j],a[j+1];

for (i=0; i<n-1; i++) cout<<a[i]<<" ";

cout<<a[n-1]"\n";

#include<iostream>

#include<algorithm>

#include<vector>

using namespace std;

int i,j,n;

int main()

{cin>>n;

vector<int> a(n);

for (i=0; i<n; i++)cin>>a[i];

// сортування масиву.

sort(a.begin(),a.end());

for (i=0; i<n-1; i++) cout<<a[i]<<" ";    

cout<<a[n-1]<<"\n";

 return 0;

}

 

$111.               

Обчислити суму додатних елементів в парних рядках прямокутної таблиці

int main()

{int n,m,i,j,a[100][100];

cin>>n>>m;

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

for(j=0;j<m;j++)

cin>>a[i][j];

int s=0;

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

for(j=0;j<m;j++)

if(a[i][j]>0 && i%2==0)s=s+a[i][j];

cout<<s<<endl;

}

 

$112.               

Перетворення числа в рядок (char)

#include <iostream>

#include <string>

#include <stdlib.h>

using namespace std;

int main()

{

    char s[100];

    cin >> s;

    int i = atoi(s);

    cout << i << endl;

    itoa(i,s,10);

    cout<<s<<endl;

        return 0;

}

 

$113.               

Перетворення чисов в рядок (string)

#include <iostream>

#include <string.h>

#include <string>

#include <cstring>

#include <stdlib.h>

using namespace std;

int main()

{string s;

cin>>s;

cout<<atoi(s.c_str())<<endl;

/*

int atoi(const char* str)

long atol(const char* str)

double atof(const char* str)

*/

    return 0;

}

 

$114.               

Зчитування до кінця рядка

while (cin.peek()!='\n')

{ n++;

cin>>a[n];

 }

$115.               

Зчитування до кінця файлу

while (!cin.eof())

 { m++;

cin>>b[m];

 }

$116.               

Зчитування рядка з пропусками

string str;

getline(cin,str,'\n');

$117.               

Зчитування рядка з пропусками (тип string)

#include "fstream"

#include "string.h"

#include "string"

using namespace std;

ifstream cin("input.txt");

ofstream cout("output.txt");

int main()

{string s;

getline(cin,s);

cout<<s;

}

$118.               

Зчитування рядка з пропусками (тип char)

#include "fstream"

#include "string.h"

using namespace std;

ifstream cin("input.txt");

ofstream cout("output.txt");

int main()

{char str[100];

cin.getline(str,sizeof(str));

cout<<str;

}

$119.               

Кількість цифр в числі

#include "string"

int main()

{string s;

cin>>s;

cout<<s.length();}

 

#include "iostream"

#include "math.h"

using namespace std;

int main()

{

unsigned long long number;

cin>>number;

cout.precision(0);

cout<<fixed<<log10(double (number))+1;

}

               

$11.    Функції для роботи з рядками

Більшість функцій для роботи з рядками містяться в бібліотеці cstring .(#include <cstring>)

Функція

Дія

memset(str, c, n)

перші n символів рядка str заповнює значеннями c

strnset(str, c, n)

перші n символів рядка str заповнює значеннями c

strlen(str)

визначення довжини рядка

strcpy(str1, str2)

в рядок str1 копіює рядок str2

strncpy(str1, str2, n)

в рядок str1 копіює не більше, ніж n символів рядка str2

strcat(str1, str2);

до рядка str1 дописує рядок str2

strncat(str1, str2, n)

до рядка str1 дописує не більше, ніж n символів рядка str2

strchr(str, c)

визначає перше входження літери c  в рядок str; повертає вказівник на знайдену літеру (або NULL, якщо її нема)

strrchr(str, c)

визначає останнє входження літери c  в рядок str; повертає вказівник на знайдену літеру (або NULL, якщо її нема)

strstr(str1, str2)

визначає перше входження підрядка str2 в рядок str1; повертає вказівник на першу літеру знайденого підрядка (або NULL, якщо він не зустрічається)

strrev(str)

записує рядок str у зворотному порядку

strupr(str)

перетворює всі літери рядка у великі літери

strlwr(str)

перетворює всі літери рядка у малі літери

strcmp(str1, str2)

порівнює рядки str1 та str2; якщо рядки рівні, то повертає 0;

якщо відмінні – то повертає різницю між першими відмінними літерами: с1 – с2

stricmp(str1, str2)

аналогічна до strcmp(...), тільки ігнорує величину літер

strcspn(str1,str2)

повертає число – позицію першого входження в рядок str1 символу  із набору str2

strdup(str1)

розподіляє пам’ять і копіює рядок str1 за виділеною адресою; повертає адресу початку виділеної пам’яті

Приклади:

strcmp("abcdefgh","abcabc") = 3;

stricmp("Abcd","abcD")       = 0;

strlen("alpha")                    = 5;

cout<<strchr("University", 'v')          –>  "versity";

cout<<strstr("MicroLab Studio", "Lab")   –> "Lab Studio";

cout<<strupr("My first Program")               –> "MY FIRST PROGRAM".

 
Задача Binary PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
29.09.10 13:21

Перший тур Волинської учнівської Інтернет-олімпіади з програмування

vippoolimp.byethost14.com

1. Задача BINARY (20 балів)

Ім’я вхідного файлу: BINARY.DAT

Ім’я вихідного файлу: BINARY.SOL

Максимальний час роботи на одному тесті: 3с

Талановитий учень Діма придумав цікаву гру з числами. А саме, взявши довільне ціле число, він переводить його в двійкову систему числення, отримуючи деяку послідовність з нулів та одиниць, що починається з одиниці. (Наприклад, десяткове число (19)10 = 1*2^4+0*2^3+0*2^2+1*2^1+1*2^0 в двійковій системі запишеться як (10011)2). Потім вчитель починає зсовувати цифри отриманого двійкового числа по циклу (так, що остання цифра стає першою, а всі інші зсовуються на одну позицію вправо), виписуючи утворюються при цьому послідовності з нулів і одиниць у стовпчик - він помітив, що незалежно від вибору вихідного числа виходять послідовності починають з деякого моменту повторюватися. І, нарешті, учень відшукує максимальне з виписаних чисел і переводить його назад в десяткову систему числення, вважаючи це число результатом виконаних маніпуляцій. Так, для числа 19 список послідовностей буде таким:

10011

11001

11100

01110

00111

10011

і результатом гри буде число 1*2^4+1*2^3+1*2^2+0*2^1+0*2^0 = 28.

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

Вхідний файл містить одне ціле число N (0<=N<=32767).

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

Приклад

BINARY.DAT

BINARY.SOL

19

28

Последнее обновление 30.09.10 08:21
 
Заняття 3 (20.09.2017) PDF Печать E-mail
Добавил(а) Administrator   
22.09.17 07:52

1.    Базові структури алгоритмів

Приклад 1

Дано послідовність з N чисел, котра містить різні числа від 0 до N. Визначити, якого числа не існує в  даній послідовності.

1 спосіб.

Посортувати і відшукати  різницю, рівну два між сусідніми елементами.

n=5

0 2 1 5 3

0 1 2 3 5

4

2 спосіб.

Перевірити, чи  існує кожне з чисел від 0 до N у послідовності, використовуючи два вкладених цикли.

3 спосіб.

Скористатися формулою суми арифметичної прогресії.

Приклад:

N=5;

Послідовність А[1..N]  4 2 3 0 5

Сума елементів послідовності рівна S1=4+2+3+0+5=14

Сума арифметичної прогресії (0..N) 0 1 2 3 4 5 згідно з формулоюS=(An+A1)*n/2

S2=(5+0)*15/2

Результат R=S2-S1=15-14=1

Отже, не існує числа 1.

Приклад 2

                Аналогічний приклад можна навести і на більш складніший числовий ряд чисел Фібоначі.

Спосіб 1

Кожне наступне знаходити як суму двох попередніх.

1 1 2 3 5 8 ...

k1 перше число

k2 друге число

k3:=k1+k2;

k1:=k2;

k2:=k3;

Спосіб 2

Використаємо рекурентну формулу  чисел Фібоначі.

 F_n = \frac{ \left( \frac{1+\sqrt{5}}{2} \right)^[...]

http://e-maxx.ru/algo/fibonacci_numbers

 

Кожне число Фібоначі знаходять за формулою:

xy exp(y*ln(x))

Приклад 3

Перестановка значення змінної місцями

a,b 2,3 3,2

c=a;a=b;b=c;

c=2;a=3;b=2;

a=a+b; b=a-b; a=a-b;

a=5;b=5-3=2;a=5-2=3;

2.    Розгалуження

Приклад 3

Скласти програму знаходження найбільшого з трьох чисел a,b,c, введених з клавіатури.

Існують різні способи розв’язку даного завдання

1 спосіб 

var a,b,c,max:integer;

begin

readln(a,b,c);

if (a>=b && a>=c) max=a;

if (b>=a)and(b>=c) then max:=b;

if (c>=a)and(c>=b) then max:=c;

writeln(max);

end.

2 спосіб

Вкладені розгалуження

IF умова THEN IF умова THEN оператори ELSE оператори ELSE оператори

var a,b,c,max:integer;

begin

readln(a,b,c);

if a>b then if a>c then max:=a else max:=c else if b>c then max:=b else max:=c;

writeln(max);

end.

3 спосіб

var a,b,c,max:integer;

begin

readln(a,b,c);

max:=a;

if b>max then max:=b;

if c>max then max:=c;

writeln(max);

end.

Третій спосіб найраціональніший

 

C++

max(a, max(b,c);


 

3.   Цикл

Приклад 3

                Знайти найбільший спільний дільник

 (HCD)  a,b,

 HCD(0,0)=0

 HCD(a,0)=(a)

HCD(а,в)=HCD(b,r1)=HCD(r1,r2)=HCD(rn-1,rn)=|rn-1|, де rі- остача від ділення?

 Знайти найменше спільне кратне (HCD) цілиx чисел аШ0,вШ0

                HCK(a,b)=a*b/HCD(a,b)

 HCD(а,в)=HCD(b,r1)=HCD(r1,r2)=HCD(rп-1,rn)=|rn-1| 

     4.Знайти досконалі числа на проміжну [1,n].

6=1+2+3 (досконале - рівне сумі всіх своїх дільників, крім останнього)

45 15  ------- 2 3 4 5 6 7 8 9 10 11 12 13 14 15

45 % 15=0

15

15 25

  1. b

15%25=25

25 % 15=10

15 %10 =5

10%5=0

5

0

while (b>0)

{temp=a%b;

a=b;

b=temp;

}

nsd=a

Алгоритм Евкліді

Приклад 4

Знайти дільники числа.

Знайти кількість дільників числа.

 

Практикум

$11.   Фібоначі

Турнір «Методика складання алгоритмів – 24» Задача B

$12.   НСД.

https://www.e-olymp.com/uk/problems/137

https://www.e-olymp.com/uk/problems/136

https://www.e-olymp.com/uk/problems/7239

https://www.e-olymp.com/uk/problems/4742

https://www.e-olymp.com/ru/problems/4283

Последнее обновление 22.09.17 08:01
 
Вітаємо переможців PDF Печать E-mail
Добавил(а) Administrator   
26.01.11 11:05

Переможці ІІІ етапу Всеукраїнської учнівської олімпіади з інформатики 2010-2011 н. р.

 

№ п.п. Прізвище, ім'я та по батькові учня Клас Зайняте місце

1

Лагода Віталій Володимирович

8

ІІІ

2

Маснуха Іван Іванович

9

І

3

Пілецький Назар Анатолійович

9

ІІІ

4

Прус Владислав Васильович

10

ІІ

5

Омелян Володимир Петрович

10

ІІІ

6

Міщук Юрій Сергійович

10

ІІІ

7

Семенюк Олександр Петрович

10

ІІІ

8

Бойко Роман Вікторович

11

І

9

Дідух Сергій Сергійович

11

ІІ

10

Кочетков Олексій Олександрович

11

ІІІ

11

Радзивилюк Іван Михайлович

11

ІІІ

12

Лугвіщик Андрій Вікторович

11

ІІІ

13

Задворний Юрій Миколайович

11

ІІІ

 

 


Страница 29 из 43

Статистика

Пользователей : 269
Статей : 225
Просмотрено статей : 127796

Вход/Регистрация

Нет