Добавил(а) 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". |
Добавил(а) Гісь Ігор Володимирович
|
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 |
|
Добавил(а) 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/tex2png/cache/b905d527e4c238203b5be148f5f93a83.png)
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
- 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 |
Добавил(а) 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
|
ІІІ
|
|
|
|
|
|
|