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

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

Школа олімпійського резерву з інформатики
07.11.2012 Робота з файлами PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
07.11.12 08:19

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

Pascal

C++

var f1,f2:text;

assign(f1,'input.dat');

reset(f1);

read(f1,...);

close(f1);

assign(f2,'output.dat');

rewite(f2);

write(f2,...);

close(f2);

#include <fstream.h>

void main()

{

ifstream inp;inp.open("input.dat");

int a,b,c;

inp>>a>>b;

inp.close();

c=a+b;

ofstream out;out.open("output.sol");

out<<c;

out.close();

}

assign(input,'input.dat');

reset(input);

read(...);

close(input);

assign(output,'output.dat');

rewite(output);

write(...);

close(output);

#include <fstream.h>

ifstream inp("input.dat");

ofstream out("output.sol");

void main()

{

int a,b,c;

inp>>a>>b;

c=a+b;

out<<c;

}

Приклад програми на Delphi

program zad1;

{$APPTYPE CONSOLE}

var a,b,c:integer;

begin

assign(input,'input.dat');

reset(input);

readln(a,b);

close(input);

c:=a+b;

assign(output,'output.ans');

rewrite(output);

writeln(c);

close(output);

end.

Приклад програми на С++

//#include "stdafx.h"

#include <cstdlib>

#include "iostream"

#include "fstream"

using namespace std;

int main()

{ifstream cin("input.dat");

ofstream cout("output.ans");

int a,b,c;

cin>>a>>b;

c=a+b;

cout<<c<<endl;

return 0;

}

 
Повторення. Масиви Паскаль PDF Печать E-mail
Добавил(а) Administrator   
11.09.13 00:00

Робота з масивами Pascal

 

Операція з масивом

Лінійний масив

Прямокутна таблиця

Опис

Var a:array[1..100] of integer;

i, n:integer;//індекс, кількість елементів

Var a:array[1..100,1..100] of integer;

i, n,m:integer;//індекс, кількість рядків, стовпців

Введення

readln(n);

for i:=1 to n do read(a[i]);

readln(n);

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

Виведення

for i:=1 to n do write(a[i],’ ‘);

for i:=1 to n do begin

for j:=1 to m do

write(a[i,j],’ ‘);

writeln;

end;

Сумування

s=0;

for i:=1 to n do s:=s+a[i];

s=0;

for i:=1 to n do

for j:=1 to m do

s:=s+a[i,j];

Пошук

readln(k);

for i:=1 to n do if  a[i]=k then writeln(i);

readln(k);

for i:=1 to n do

for j:=1 to m do

if  a[i,j]=k then

writeln(i,’ ‘,j);

Пошук максимального

max:=a[1];nmax:=1;

for  i:=2 to n do if  a[i]>max then begin max:=a[i];nmax:=i;end;

max:=a[1];nmax:=1;mmax:=1;

for  i:=1 to n do

for j:=1 to m do

if  a[i,j]>max then begin max:=a[i,j];nmax:=i;mmax:=j;

end;

Сортування

for  i:=1 to n -1do

for j:=1 to n -1do

if  a[j]>a[j+1] then begin

temp:=a[j];

a[j]:=a[j+1];

a[j+1]:=temp;

end;

Стирання

n:=n-1;

for  i:=k to n do a[i]:=a[i+1];

Вставка

n:=n+1;

for  i:=n downto k+1 do

a[i]:=a[i-1];

 

 

 

Последнее обновление 09.10.13 21:58
 
Заняття 7 (19.10.2016) PDF Печать E-mail
Добавил(а) Administrator   
29.11.16 09:34

$11.     Динамічне програмування . Купування квитків

Ім'я файлу програми:

Bilet.*

Ім'я вхідного файлу:

Bilet.dat

Ім'я вихідного файлу:

Bilet.dat

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

5 секунд

Максимальна оцінка за завдання:

100 балів

За квитками на прем'єру нового мюзиклу вишикувалася черга з N людей, кожний з яких хоче купити 1 квиток. На всю чергу працювала тільки одна каса, тому продаж квитків йшов дуже повільно, приводячи людей черги у відчай. Найкмітливіші швидко відмітили, що, як правило, декілька квитків в одні руки касир продає швидше, ніж коли ці ж квитки продаються поодинці. Тому вони запропонували декільком людям, які стоять підряд віддавати гроші першому з них, щоб він купив квитки на всіх.

Проте для боротьби із спекулянтами касир продавала не більше 3-х квитків в одні руки, тому домовитися таким чином між собою могли лише 2 або 3 підряд вартих людини.

Відомо, що на продаж i-ій людині з черги одного квитка касир витрачає Ai секунд, на продаж двох квитків — Bi секунд, трьох квитків — Ci секунд. Напишіть програму, яка підрахує мінімальний час, за який могли бути продані квитки для всіх людей черги.

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

Формат вхідних даних

У вхідному файлі записано спочатку число N — кількість покупців в черзі (1<=N<=5000). Далі йде N трійок натуральних чисел Ai, Bi, Ci. Кожне з цих чисел не перевищує 3600. Люди в черзі нумеруються починаючи від каси.

Формат вихідних даних

У вихідний файл виведіть одне число — мінімальний час в секундах, за яке могли бути обслужені всі покупці.

 

Приклади

Bilet.dat

Bilet.sol

5

5 10 15

2 10 15

5 5 5

20 20 1

20 1 1

12

2

3 4 5

1 1 1

4

N=5

i

Ai

Bi

Ci

1

5

10

15

2

2

10

15

3

5

5

5

4

20

20

1

5

20

1

1

D[i]= min ( D[i-1]+Ai,  D[i-2]+ Bi-1,  D[i-3]+ Ci-2 )

D[1]

D[2]

D[3]

D[4]

D[5]

5

7

5

6

12 – відповідь завдання

d[0]= 0;

d[1]= а[1];

d[2]= Мінімальне(а[1]+a[2], b[1]);

Для i від 3 до n  пц

d[i]= Мінімальне(d[i-1]+ а[i],Мінімальне(d[i-2]+ b[i-1], d[i-3]+ с[i-2]));

 

Задача 2. На квадратному аркуші паперу в клітинку розміром NхM клітинок намальовано кілька прямокутників. Кожен прямокутник складається з цілих клітинок, різні прямокутники накладаються один на одного.

Необхідно написати програму, яка рахує площу покриту цими прямокутниками.

Вхідні дані

В першому рядку N, розмір масиву, в наступних n рядків  масиву, в кожному з яких написані через пробіл n елементів масиву: A [елемент I, J] = 1, якщо клітина [I, J] належить будь-якому прямокутника, і A [I, J ] = 0, в іншому випадку.

Вихідні дані

Необхідно вивести єдине число - кількість прямокутників.

#include <iostream>

using namespace std;

 int a[100][100];

int main()

{

int n,m;

cin>>n>>m;

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

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

    cin>>a[i][j];

int k=0;

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

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

    if (a[i][j]==1)k++;

     cout<<k<<endl;

        return 0;

}

Задача 3.  "Прямокутники" На квадратному аркуші паперу в клітинку розміром NхN клітин намальовано кілька прямокутників. Кожен прямокутник складається з цілих клітинок, різні прямокутники не накладаються один на одного і не дотикаються.

Необхідно написати програму, яка рахує число цих прямокутників.

Вхідні дані

В першому рядку N, розмір масиву, в наступних n рядків  масиву, в кожному з яких написані через пробіл n елементів масиву: A [елемент I, J] = 1, якщо клітина [I, J] належить будь-якому прямокутника, і A [I, J ] = 0, в іншому випадку.

Вихідні дані

Необхідно вивести єдине число - кількість прямокутників.

#include <fstream>

using namespace std;

ifstream cin("input.txt");

ofstream cout("output.txt");

    int a[100][100];

int main()

{

int n;

cin>>n;

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

    for (int j=0;j<n;j++)

    cin>>a[i][j];

int k=0;

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

    for (int j=0;j<n;j++)

    if (a[i][j]==1 && a[i+1][j]==0 &&a[i][j+1]==0 && a[i+1][j+1]==0)k++;

     cout<<k<<endl;

        return 0;

}


Задача 4. 

Мишка i зернинки

В iндiйському храмi пiдлогу прямокутної форми вимощено однаковими квадратними плитками 1х1, на кожну з яких  насипано вiд 0 до N зернинок (N<30000). Розмiри пiдлоги АхВ. Мишка вибiгає з лiвого нижнього кута пiдлоги  храму i рухається до входу у iншу нiрку, розмiщену у протилежному кутку. Мишка може рухатись лише вправо або вперед, забираючи всi зернинки з клiтини, в                якiй вона знаходиться. Потрiбно:

а)     знайти кiлькiсть можливих маршрутiв руху мишки:

б)     знайти маршрут, рухаючись по якому мишка збере найбiльшу кiлькiсть зернин.

Вхiдний файл MOUSE.DAT у першому рядку мiстить числа А та В – розмiри  пiдлоги (1£A,B£100 ). Далi йде А рядкiв, у кожному з яких розмiщено В чисел – кiлькiсть  зернинок  на вiдповiднiй плитцi.

Програма MOUSE.* повинна вивести на екран  та  записати у  файл MOUSE.SOL у перший рядок кiлькiсть можливих  маршрутiв, у другий  рядок – найбiльшу  кiлькiсть зернинок, що може зiбрати мишка, у третiй рядок – маршрут руху  мишки  у  формi  ППВВВПВ  (В – крок вперед, П – крок вправо).

Приклад вхiдних та вихiдних даних:

    MOUSE.DAT                                                 MOUSE.SOL

    2 3                                                                                    3

    3 2 4                                                                                 12

    1 5 1                                                                                 ПВП

for (int i=1;i<=n;i++)

for (int j=1;j<=m;j++)

a[i][j]=max(a[i][j]+a[i-1][j], a[i][j]+a[i][j-1])

3 тур - з 31.10 по 06.11.2016

точка входу для відправлення розв'язків http://134.249.159.199//cgi-bin/new-client?contest_id=35

Задача 1. Мега реклама (20 балів)

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

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

Ліміт часу: 1с.

На дошці наклеєно декілька листів оголошень. Всі вони прямокутної форми. Деякі листи накладаються частково або повністю. Усі горизонтальні та вертикальні сторони строго взаємо паралельні. Листи, які частково накладаються утворюють многокутник.

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

Вхідні дані

У першому рядку вхідного файлу записано число N - кількість прямокутників. В наступних N рядках записано числа x1 y1 x2 y2 - декартові координати нижнього лівого та правого верхнього кутів прямокутника. Всі координати - цілі числа що по модулю не перевищують 10000.

Вихідні дані

У вихідний файл потрібно записати суму периметрів утворених геометричних фігур (прямокутників, многокутників).

Приклад

Приклад вхідних даних 

Приклад вихідних даних 

7

-15 0 5 10

-5 8 20 25

15 -4 24 14

0 -6 16 4

2 15 10 22

30 10 36 20

34 0 40 16

228

#include "fstream"

using namespace std;

ifstream cin("input.txt");

ofstream cout("output.txt");

int a[2000][2000];

int main()

{

                int s,k, i,j,n,xz,yz;

                cin>>n;

int *x1=new int[n+1];

int *y1=new int[n+1];

int *x2=new int[n+1];

int *y2=new int[n+1];

int maxx=-10000,maxy=-10000,minx=10000,miny=10000;

                for(k=1; k<=n; k++){

                                               cin>>x1[k]>>y1[k]>>x2[k]>>y2[k];

                                               if (x1[k]<minx) minx=x1[k];

                                               if (y1[k]<miny) miny=y1[k];

                                               if (x2[k]<minx) minx=x2[k];

                                               if (y2[k]<miny) miny=y2[k];

                                               if (x1[k]>maxx) maxx=x1[k];

                                               if (y1[k]>maxy) maxy=y1[k];

                                               if (x2[k]>maxx) maxx=x2[k];

                                               if (y2[k]>maxy) maxy=y2[k];

                }

//cout<<minx<<miny<<maxx<<maxy<<endl;

                xz=-minx+1;

                yz=-miny+1;

                minx=minx+xz;

                miny=miny+yz;

                maxx=maxx+xz;

                maxy=maxy+yz;

//cout<<minx<<miny<<maxx<<maxy<<endl;

                               for(k=1; k<=n; k++)

        {

                               x1[k]=x1[k]+xz;

                               x2[k]=x2[k]+xz;

                               y1[k]=y1[k]+yz;

                               y2[k]=y2[k]+yz;

                                                               for(i=x1[k]+1; i<=x2[k]; i++)

                                                                              for(j=y1[k]+1; j<=y2[k]; j++)

                                                                              {a[i][j]=1;}

                               }

/*           for(i=minx;i<=maxx; i++){

                               for(j=miny; j<=maxy; j++)

                                               cout<<a[i][j]; cout<<endl;}

*/

                s=0;

                for(i=minx;i<=maxx+1; i++)

                               for(j=miny; j<=maxy+1; j++){

                               if((a[i][j]==0 && a[i+1][j]==1) || (a[i][j]==0 && a[i-1][j]==1) ||

        (a[i][j]==0 && a[i][j+1]==1) || (a[i][j]==0 && a[i][j-1]==1 )) s++;

    if((a[i][j]==0 && a[i+1][j]==1 && a[i][j+1]==1) || (a[i][j]==0 && a[i+1][j]==1 && a[i][j-1]==1) ||

        (a[i][j]==0 && a[i-1][j]==1 && a[i][j+1]==1 ) || (a[i][j]==0 && a[i-1][j]==1 && a[i][j-1]==1  )) s++;

}

                cout<<s<<endl;

                return 0;

}


Додатково

ІІ етап Всеукраїнської учнівської олімпіади з інформатики (м.Луцьк) 2015-2016н.р.  - http://134.249.159.199/cgi-bin/new-client?contest_id=21

Логін school01-2016-school10-2016. Пароль 1.

 
01.10.2014 Базові структури алгоритмів (С++) PDF Печать E-mail
Добавил(а) Administrator   
06.10.14 11:39

24.09.2014

1. Етапи розв’язування задач

Задача 1. Перелити рідини з одного стакана в інший (Переставити змінні місцями).

2. Алгоритм: властивості, способи подання, примітиви, псевдокод.

3. Теорія розв’язку задач (Дж. Поліа, 1945)

Задача 2. Людина А хоче визначити вік трьох дітей людини В. Відомо що добуток віку рівний 36 та сума віку. А сказав, що даних недостатньо. В повідомив, що старша дитина грає на піаніно. Тоді А назвав вік дітей.

Задача 3.

 A,B,C, D зробили прогнози:

- A – сказав, що переможе В

- B – сказав, що D буде останнім;

- C - сказав, що учасник А буде третім;

- D - сказав, що збудеться передбачення А.

Один прогноз вірний і це прогноз перемржця.

Задача 4.

1. Знайдіть алгоритм розв’язку задачі і дайте відповідь на запитання.

а) Для заданого додатного числа n знайдіть таку комбінацію цілих додатніх чисел, добуток яких максимальний серед всіх можливих комбінацій цілих додатних чисел, сума яких рівна n. Наприклад, якщо n рівне 4, то шуканий список є (2,2), так як 2*2 більше, ніж 1*1*1*1, 2*1*1 і 3*1. Для n, рівного 5, шукана комбінація буде (2, 3).

б) Яка шукана комбінація для n=2001?

в) Поясніть, як вам вдалось розв’язати задачу.

4. Алгоритмічні структури.

- слідування - послідовний ;

- розгалуження – умовний;

- цикл – повторення;

- підпрограми – під задачі;

- послідовного пошук;

поки (шукане значення ≠ значення яке перевіряється і є ще не перевірені елементи)  вибрати наступний елемент, який перевіряється;

якщо шукане значення = перевіреному значенню то Шуканий елемент знайдено  інакше Шуканий елемент  не знайдено;

- рекурсивний пошук;

Вибрати сер. елемент  m=(L+R)/2;

                    якщо  шуканий елемент < за середній елемент  то  продовжити пошук(L,m-1) в лівій частині інакше  продовжити пошук(m+1, R) в правій частині

5. Ефективність і правильність алгоритму k, nk. nn, n!, logk n.

6. Мови програмування

7. Лексеми

- алфавіт

- службові слова

- ідентифікатор

- тип даних

- синтаксис

- семантика

- присвоєння

- керуючі оператори

- процедури та функції

8. Середовище реалізації

- трансляція

- компіляція

- інтерпретація

9. Порядок роботи

  1. Встановити Visual С++ Express www.microsoft.com/express/vc/.
  2. Запустити середовище Головне меню\Програми\Visual C++ 9.0 Express Edition\Microsoft Visual C++ 2008 Express Edition.
  3. Створити новий пустий проект «Консольний додаток Win32», який зберігати в власну папку(*.sln).
  4. Створити файл вихідного коду (*.cpp)
  5. Перевірити програми з додатку.

Зауваження

Для компіляції та виконання натискуйте клавішу Ctrl F5

// Під'єднання модулів

#include <iostream>//організація введення-виведення в мові програмування C++

#include <math.h>//виконання простих математичних операцій

using namespace std;// звернення до об'єктів напряму

int main()

{

int a,b; //опис цілих

float c; //опис дійсних

cin>>a>>b;//ведення даних

c=a/b;

cout<<c<<”\n”;//виведнння даних

}

11. Типи величин, вираз, операції, функції

Типи величин

Тип даних:

Размір в байтах:

Діапазон

char

1

один символ від 0 до 255

wchar_

2

от -32768 to +32767

short

2

от -2^8 до 2^8 от -32768 to +32767

int

4

от -2^16 до 2^16 2147483648 до 2147483647

float

4

от -2^16 до 2^16   ± 3,4x10±38, примерно с 7-значной точностью

long

4

от -2^16 до 2^16 2147483648 до 2147483647

long long (int_64)

8

от -2^32 до 2^32

unsigned long long

8

от 0 до 18446744073709551616

double

8

от -2^32 до 2^32 ± 1,7x10*308, примерно с 15-значной точностью

long double

8

от -2^32 до 2^32

unsigned short

2

от 0 до 2^16 від 0 до 65535

unsigned int

4

от 0 до 2^32 от 0 до 4294967295

unsigned float

4

от 0 до 2^32

unsigned double

8

от 0 до 2^64

long double

8

± 1,7x10*308, примерно с 15-значной точностью

string

 

рядок

int a;

float b=float(a)/3;

#include "iostream"

using namespace std;

int a,b;

int main()

{

//ifstream cin("input.txt");

//ofstream cout("output.txt");

float a;

cin>>a;

cout.precision(2);

cout<<fixed<<a<<endl; //"\n"

return 0;

}

Операції

Ім'я

Опис

+

с=a+b; k=k+1; k++; s+=k;

-

c=a-b; k=k-1; k--; s-=k;

*

c=a*b;

/

a=5.0/2;//2.5   a=5/2;//2

%

a=5%2;//1

Функції

Ім'я

Опис

abs(i)

модуль числа

ceil(f)

округлення до найближчого більшого цілого числа

fabs(f)

абсолютне значення

floor(f)

округлення до найближчого меншого цілого цілого

fmod(a,b)

повертає залишок від ділення двох чисел

modf(x,p)

повертає цілу та дробову частину аргументу х зі знаком

pow(x,y)

вираховує значення xy

sqrt(f)

квадратний корінь

#include "iostream"

#include "math.h"

using namespace std;

int main()

{

double f;

f=-5.5; cout<<abs(f)<<endl;//5.5

f=-5.5; cout<<fabs(f)<<endl;//5.5

f=5.8; cout<<floor(f)<<endl;//5

f=5.8; cout<<ceil(f)<<endl;//6

f=9.0; cout<<sqrt(f)<<endl;//3

f=5; cout<<pow(f,2)<<endl;//25

f=5.5; cout<<fmod(f,2)<<endl;//1.5

f=17.25;double p,y;y=modf(f,&p); f=5.2; cout<<y<<" "<<p<<endl;//0.25  17

return 0;}

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

#include "iostream"

#include <math.h>

using namespace std;

int main()

{

cout <<"Okey";

return 0;

}

12. Слідування

1. Два  резистори  R1  і  R2  з'єднані паралельно. Визначити сумарний  опір за формулою .

2.     Обчислити  відстань  між двома точками з координатами X1,Y1 і X2,Y2  за формулою L=

#include "iostream"

#include <math.h>

using namespace std;

int main()

{

float x1,y1,x2,y2;

cin>>x1>>y1>>x2>>y2;

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

cout<<("L="<<l<<endl;

}

3.   В  рядку  S  символів,  на  сторінці  R рядків. Скільки символів в книжці, у якої N сторінок?

За скільки хвилин учень прочитає книгу, якщо він одну сторінку читає за T хвилин?

#include "iostream"

using namespace std;

int main()

{int s,r,n,t;

cin>>s>>r>>n>> t;

int a=s*r*n;

cout<<"A=”<<a<<”\n;

int b=a/t;

cout<<"B=”<<b<<”\n;

int g,h;

g=b/60; h=b%60;

cout<<g<<”:”<<h;

}

4. Скільки  лампочок потрібно, щоб освітити вулицю довжиною D км, як­­­ що стовпи з ліхтарями стоять на відстані V м?

5. Одна  серія фільму по телевізору триває F хв. Скільки часу в годи­­нах необхідно, щоб переглянути N серій?


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

Операції порівняння

<, >. <=,>=, !=, ==

Логічні операції

&&, ||, !!

Умовний оператор

if (умова)  команда 1; else команда 2;

6. Знайти максимальне значення серед двох чисел введених з клавіатури.

#include "iostream"

using namespace std;

int main()

{

int a,b,max;

cin>>a>>b;

if (a>b) max=a; else max=b;

court<<max<<endl;

}

7. Знайти максимальне значення серед трьох чисел введених з клавіатури.

#include "iostream"

using namespace std;

int main()

{

int a,b,c,max;

cin>>a>>b>>c;

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

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

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

cout<<max<<endl;

}

8. Введене число перевірити: додатне, від'ємне чи дорівнює нулю.

9. Напишіть програму перевірки знання додавання трьох введених чисел.

10.Введене число перевірити: менше, більше чи дорівнює воно 100.

11. Перевірити, чи існує трикутник із сторонами A, B, C.

14. Цикл

З параметром

for (i=1;i<=n;i++) {блок операторів};

З перед умовою

while (умова){блок операторів};

Після умовою

do {блок операторів}

while (умова);

12.Скласти програму виведення на екран квадратiв всiх натуральних чисел менших за 20.

#include "iostream"

using namespace std;

int main()

{for (int i=1;i<20;i++) cout<<i<<”*”<<i<<”=”<<,i*i;

}

13. Скласти програму знаходження суми всiх чисел кратних  трьом  з  вiдрiзка [n,50].

#include "iostream"

using namespace std;

int main()

{int n; cin>>n;

int i=48; int s=0;

while (i>=n)

{s+=i;

i-=3;}

cout<<s<<endl;

}

14. Протабулювати функцію f(x)=cos(2x) на проміжку [a,b] розбитого на n проміжків.

#include "iostream"

using namespace std;

int main()

{

const a=0, b=10, n=10;

float h=(b-a)/n;

float x=a;

float y;

while (x<=b)

{ y=cos(2*x);

cin<<x<< “   “<<y;

x=x+h;}

}

15. Написати таблицю переведення температури з градусів  по  шкалі Цельсія (С) в градуси шкали Фаренгейта (F) за формулою F=1.8*C+32  для значень від 10 до 20 градусів з кроком 2 градуси.

16. Написати таблицю переведення радіуса в площу круга для  значень  радіуса від 1 до 18 В кроком 2.

15. Масиви

Операція

Лінійний масив

Прямоктна таблиця

Опис

Int a[100];

int i, n;//індекс, кількість елементів

Int a[100][100];

int i,j, n,m;//індекс, кількість елементів

Введення

cin>>n;

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

cin>>n>>m;

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

for(j=1;j<=m;j++)  cin>>a[i][j];

Виведення

for(i=1;i<=n;i++)cout<<a[i<<>" ";

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

for(j=1;j<=m;j++) cout<<a[i][j]<<" ";

Сумування

s=0;

for(i=1;i<=n;i++)s=s+a[i];

s=0;

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

for(j=1;j<=m;j++) s=s+a[i][j];

Пошук

cin>>k;

for(i=1;i<=n;i++) if (a[i]==k) cout<<i;

cin>>k;

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

for(j=1;j<=m;j++) if (a[i][j]==k) cout<<i<<" "<<j;

Пошук максимального

max=a[1];nmax=1;

for(i=2;i<=n;i++)if  (a[i]>max) {max=a[i];nmax=i;}

max=a[1];imax=1;jmax=1;

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

for(j=1;j<=m;j++) if  (a[i][j]>max) {max=a[i][j];

imax=i;jmax=j;}

Сортування

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

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

if  (a[j]>a[j+1]) {temp=a[j];  a[j]=a[j+1]; a[j+1]=temp;}

 

Стирання

n=n-1;

for(i=k;i<=n;i++) a[i]=a[i+1]; 

 

Вставка

n=n+1;

for(i=n;i>=1;i--) a[i]=a[i-1]; 

 

17. Дано лінійну таблицю  із  n  цілих  чисел.  Знайти  суму  S  всіх елементів.

#include "iostream"

using namespace std;

int main()

{

int a[100];

int i,n,s;

cin>>n;

for (i=1;i<=n;i++){cin>> a[i];}

s=0;

for (i=1;i<=n;i++) s=s+a[i];

cout<<s;

}

18. З масиву стерти K-тий елемент.

#include "iostream"

using namespace std;

int main()

{

int a[100];

int i,n,k,s;

cin>>n;

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

cin>>k;

for (i=k;i<=n;i++) a[i]=a[i+1];

n--;

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

}

19. В масив вставити елемент на К-те місце

20. В таблиці а[1..100)]всі елементи рівні 2,3,4 або 5. Написати  програму, яка заміняє 2 на 5, 3 на 4, 4 на 3, 5 на 2.

21. Скласти програму підрахунку суми елементів з непарними номерами  масиву A[1..25].

22. Задано таблиця A[1..N]. Побудувати таблицю  B[1..N],  в  якій  першими розміщені всі від`ємні елементи таблиці A, а потім всі додатні.

23. Дано натуральна таблиця A[1..10]. В таблицю М записати тільки ті числа, остача від ділення яких на 3 рівна 1, а на 5 рівна 2.

24. Заданий одномірний числовий масив. Визначити суму добутків  всіх  пар  сусідніх чисел.

25. Дано масив A[1..M]. Скласти програму перестановки місцями елементів з  парними та непарними номерами.

26. Скласти програму запису в таблицю квадратів чисел від 1 до 100.

27. Скласти  програму  підрахунку  кількості  мінімальних  елементів  в масиві A[1..N].

28.В одномірному числовому масиві всі від`ємні елементи замініть  нуля ми.

29. Перевірити, чи є одномірний числовий масив упорядкованим по зростанню.

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

#include "iostream"

using namespace std;

int main()

{

ifstream inp;inp.open("input.dat");

int a,b,c;

inp>>a>>b;

inp.close();

c=a+b;

ofstream out;out.open("output.sol");

out<<c;

out.close();

}

Последнее обновление 06.10.14 11:47
 
Розв'язуйте задачі PDF Печать E-mail
Добавил(а) Administrator   
22.04.11 14:15

www.e-olimp.com.ua

1. Розклад трицифрового числа

   Розкласти дане трицифрове число на цифри.

Технічні умови

   Вхідні дані

   У єдиному рядку задано трицифрове ціле число.

   Вихідні дані

   Вивести кожну цифру з нового рядка. Порядок виведення наведено у прикладі.

Інформація про задачу

Ліміт часу: 1 секунда
Ліміт пам`яті: 64 MB
Бали за пройдений тест: 2
Складність: 18%
189/231

Приклад

Приклад вхідних даних

198

Приклад вихідних даних

1
9
8

 

2. Задача Іосифа Флавія

   Існує легенда, що Іосиф Флавій - відомий історик першого століття - вижив і став відомим завдяки математичній обдарованості. У ході іудейської війны він у складі загону з 41 іудейського воїна був загнаний римлянами у печеру. Віддаючи перевагу самовбивство полону, воїни вирішили вишукуватись у коло і послідовно вбивати кожного третього з живих до тих пір, доки не залишиться жодної людини. Проте Іосиф розом з одним зі своїх еднодумців вважав подібний кінець безглуздим - він швидко вирахував спасительні місця у порочному колі, на які поставив себе і свого товариша. І лише тому ми знаємо його історію.

   У нашому варіанті ми почнемо з того, що вшукуємо у коло N чоловік, пронумерованих числами від 1 до N, і будемо виключати кожного k-ого до тих пір, доки не вціліє лише одна людина. (Наприклад, якщо N=10, k=3, то спочатку помре 3-й, потім 6-й, потім 9-й, потім 2-й, потім 7-й, потім 1-й, потім 8-й, за ним - 5-й, і потім 10-й. Таким чином, вціліє 4-й.)

Технічні умови

   Вхідні дані

   У вхідному файлі задано натуральні числа N і k. 1N500, 1k100.

   Вихідні дані

   Вихідний файл повинен містити єдине число - номер людини, що залижилась в живих.

Інформація про задачу

Ліміт часу: 1 секунда
Ліміт пам`яті: 64 MB
Бали за пройдений тест: 9.09091
Складність: 6%
60/64
Класифікація: Сортування та послідовності

Приклад

Приклад вхідних даних

10 3

Приклад вихідних даних

4

 

3. Сортування часу

   Відсортуйте час згідно заданому критерію.

Технічні умови

   Вхідні дані

   У вхідному файлі записано спочатку число N (1N100), а потім N моментів часу. Кожен момент часу задається 3 цілими числами - години (від 0 до 23), хвилини (від 0 до 60) і секунди (від 0 до 60).

   Вихідні дані

   У вихідний файл виведіть моменти часу, упорядковані в порядку неспадання (момент часу також виводиться у вигляді трьох чисел, ведучі нулі виводити не потрібно).

 

Інформація про задачу

Ліміт часу: 1 секунда
Ліміт пам`яті: 64 MB
Бали за пройдений тест: 1.96078
Складність: 13%
53/61
Класифікація: Сортування та послідовності

Приклад

Приклад вхідних даних

4
10 20 30
7 30 00
23 59 59
13 30 30

Приклад вихідних даних

7 30 0
10 20 30
13 30 30
23 59 59

 

4. Велике сортування

   Відсортуйте N заданих чисел у неспадаючому порядку.

Технічні умови

   Вхідні дані

   Задано число N (1N100000), а потім в одному чи декількох рядках N натуральних чисел з діапазону від 1 до 100.

   Вихідні дані

   Виведіть у одному рядку N чисел у неспадаючому порядку.

Інформація про задачу

Ліміт часу: 0.1 секунди
Ліміт пам`яті: 64 MB
Бали за пройдений тест: 7.14286
Складність: 27%
43/59
Класифікація: Сортування та послідовності

Приклад

Приклад вхідних даних

5
3 1 2 4 2

Приклад вихідних даних

1 2 2 3 4

 

5. Градуйований лексикографічний порядок

   Розглянемо цілі числа від 1 до n. Назвемо вагою числа його суму цифр, і позначимо вагу числа x як w(x).

   Потім упорядкуємо числа у так званому градуйованому лексикографічному порядку. Нехай задано два числа a та b. Якщо w(a) < w(b), то число a йде у градуйованому лексикографічному порядку до числа b. Якщо ж w(a) = w(b), тоді число a йде у градуйованому лексикографічному порядку до числа b якщо і лише якщо десяткове подання числа a лексикографічно менше десятикового подання числа b.

   Наприклад, у цьому порядку:

·                     число 120 йде до числа 4;

·                     число 555 йде до числа 78;

·                     число 20 йде до числа 200.

   За заданими n і k, знайдіть номер числа k і число, яке знаходиться на k-му місці, у градуйованому лексикографічному упорядкуванні натуральних чисел від 1 до n.

 

Технічні умови

   Вхідні дані

   У вхідному файлі записані числа n і k (1kn1018).

   Вихідні дані

   У першому рядку вихідного файлу виведіть номер числа k.

   У другому рядку виведіть число, яке знаходиться на k-му місці.

Інформація про задачу

Ліміт часу: 3 секунди
Ліміт пам`яті: 32 MB
Бали за пройдений тест: 4.7619
Складність: 50%
1/2
Класифікація: Сортування та послідовності

Приклад

Приклад вхідних даних

20
10

Приклад вихідних даних

2
14

 

 

 


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

Статистика

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

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

Нет