Программирование


Каким образом игрушечные утки помогают 

программистам в отладке кода?


Некоторые программисты используют для отладки кода метод утёнка. Для этого нужно поставить на рабочий стол игрушечную утку (или представить её) и подробно объяснять строка за строкой, что должна делать программа. Прибегая к этому методу, программист зачастую встречает искомую ошибку, которую не замечал при просмотре кода в среде разработки.
Источник: http://muzey-factov.ru/tag/computers


Задача 1. Прямоугольники. Шоколадную плитку сначала разломали N раз, затем каждую полученную часть разделили M раз. Определить общее количество полученных прямоугольников.
Входные данные: строка из двух чисел N>=0 и M<=2147483647, разделенных пробелом.
Выходные данные: одно число -количество прямоугольников.

Задача 2. Размен. Написать программу, которая бы для двух типов купюр по X и Y денежных единиц определяла бы, какую наибольшую сумму денег невозможно разменять этими купюрами, если X и Y - взаимно простые натуральные числа.
Входные данные: номиналы купюр - два взаимно простых натуральных числа.
Выходные данные: наибольшая сумма, которую нельзя разменять этими купюрами. Если можно разменять любую сумму - выводим 0

2018-2019


Завдання для олімпіади з інформатики 2 туру (8-9 клас)
2018-2019
1. Дощ
Дощ вимірюється в міліметрах. Дощ збирають у вертикальній прозорій трубці з міліметровою розміткою, і як тільки падіння крапель дощу припиняється, можна перевірити висоту води в трубці.
Описание: prb545У нашій задачі, трубка, на жаль, має витік на висоті L міліметрів (мм). Якщо рівень води стає вище точки витоку, то вода стікає з труби зі швидкістю K міліметрів на годину (мм/год).
Ми хочемо з'ясувати, який випав рівень опадів, коли протягом певного часу йшов дощ. Вважаємо, що сама трубка досить висока і вона ніколи не наповнюється. Вважаємо також, що дощ йде з однією (невідомою) швидкістю, і вода не випаровується з трубки. Розміром течі можна знехтувати.
Вхідні дані
Один рядок містить п'ять позитивних чисел: L K T1 T2 H, де
L - висота витоку (мм)
K - швидкість витікання води з місця витоку (мм/год)
T1 - час продовження дощу (ч)
T2 - час між закінченням дощу і спостереженням рівня води в трубці (ч)
H - рівень води в трубці в момент спостереження (мм)
Кожне число не менше 0.01 і не більше 1000.00, задається з двома десятковими знаками.
Вихідні дані
Вивести два дійсних числа F1 F2, де F1 - найменша кількість опадів в міліметрах, яке можна отримати в результаті спостережень,, F2 - найбільша можлива кількість опадів в міліметрах, отримане при спостереженні. Вивести відповідь з точністю 10-9.

·         Ліміт часу 1 секунда
·         Ліміт використання пам'яті 64 MiB

Вхідні дані
Sample 1
80.00 0.50 2.00 1.50 80.00
Sample 2
100.00 0.50 2.00 1.50 80.00
Вихідні дані
Sample 1
80.000000000 80.759403280

Sample 2
80.000000000 80.000000000

#include <iostream>
#include <math.h>
#include <iomanip>
 
using namespace std;
 
int main()
{
    double l, k, t1, t2, h;
    cin >> l >> k >> t1 >> t2 >> h;
    double p = h + k*(t2 + t1), f = p / 2 + sqrt(p*p / 4 - k*t1*l);
    cout << fixed << setprecision(9) << (h <= l ? h : f) << " " << (h < l ? h : f) << endl;
    return 0;
}




2. Фінансова піраміда


В понеділок Толя позичив у Сергійка 2 цукерки і з задоволенням їх з'їв. У вівторок він позичив у два рази більше цукерок, після чого віддав половину боргу, а решту цукерок знову із задоволенням з'їв. Кожний наступний день він позичав у два рази більше цукерок, ніж у попередній день, віддавши з них цілу частину від половини боргу, а решту цукерок із задоволенням з'їдав. Скільки цукерок K із задоволенням з'їсть Толя N-гo дня? Який у нього буде борг B на кінець N-го дня ?

Вхідні дані
У вхідному файлі одне число N. 1 ≤ N ≤ 30.

Вихідні дані
У вихідний файл потрібно записати два числа - значення K та B.

·         Ліміт часу 1 секунда
·         Ліміт використання пам'яті 64 MiB

Вхідні дані
4
Вихідні дані
5 11

using System;
 
namespace Problem140
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int aldi = 2;
            int borc = 2;
            int yedi = 2;
            for (int i = 2; i <= n; i++)
            {
                aldi = aldi*2;
                int qaytardi = (borc + aldi)/2;
                borc = borc + aldi - qaytardi;
                yedi = aldi - qaytardi;
            }
            Console.WriteLine("{0} {1}", yedi, borc);
        }
    }
}




3. Перестановка


Задано послідовність, що складається з n натуральних чисел. Визначити, чи є вона перестановкою перших n натуральних чисел.

Вхідні дані
В єдиному рядку задано спочатку число n (n 10000), а потім n натуральних чисел, розділених пропуском. Відомо, що кожне з натуральних чисел менше за 2000000.

Вихідні дані
Вивести 0, якщо послідовність є перестановкою. Інакше слід вивести мінімальне число, що не входить в цю послідовність.

·         Ліміт часу 1 секунда
·         Ліміт використання пам'яті 128 MiB

Вхідні дані #1
3 2 1 3
Вихідні дані #1
0
Вхідні дані #2
3 1 4 2
Вихідні дані #2
3

#include <iostream>
#include <string.h>

using namespace std;

int main() {
    //Читаем входные данные. Обнуляем массив m. Для каждого входного числа
    //а ≤ n увеличим m[a] на единицу (а может принимать значение от 1 до 2000000).
    int a, n, i, m[10001];
    scanf("%d", &n);
    memset(m, 0, sizeof m);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a);
        if (a <= n) m[a]++;
    }

    //Находим наименьшее натуральное число i, которого нет во входном массиве.
    //Для такого числа будет выполнено равенство m[i] = 0.
    for (i = 1; i <= n; i++) if (m[i] == 0) break;

    //Если i > n, то все числа от 1 до n встретились.
    //Значит входная последовательность является перестановкой.
    //Иначе i будет наименьшим числом, не входящим в эту последовательность
    if (i <= n) printf("%d\n", i);
    else printf("0\n");
    return 0;
}




4. Велосипед


Велосипедист збирається проїхати з пункту A в пункт B, відстань між якими становить L м. У нього є велосипед, який може развивати швидкість v м/c. Однак перед тем як виїхати, велосипедист може виконати деякі модернізації свого велосипеда. Для кожної модернізації відомо на скільки вона збільшує швидкість велосипеда, а також час, за який вона може бути виконана. Можна виконувати декілька різних модернізацій, проте кожна модернізація може бути виконана не більше одного разу. Допоможіть велосипедисту дістатись до пункту B якомога швидше.

Вхідні дані
Напишіть програму, яка зчитує три цілих числа: відстань між пунктами L, початкову швидкість велосипеда v та кількість різних модернізацій N. Далі йде N пар цілих чисел, кожна з яких визначає відповідну модернізацію: приріст швидкості після модернізації vi і час ti, що витрачається на цю модернізацію. Всі величини задано у системі СІ (метри та секунди).

0L109, 1v106, 0N100, 0vi1000, 0ti1000.

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

·         Ліміт часу 1 секунда
·         Ліміт використання пам'яті 122.17 MiB

Вхідні дані #1
100 5 1 3 10
Вихідні дані #1
20.000000
Вхідні дані #2
100 5 2 5 3 5 3
Вихідні дані #2
12.666667

#include <iostream>
#include <string.h>
 
using namespace std;
 
int i, j, l, v, n, t, vi, mx, dp[100001];
 
int main() {
    scanf("%d %d %d", &l, &v, &n);
    memset(dp, 0x3F, sizeof dp);
    dp[0] = mx = 0;
    //Совершим пересчет массива dp для всех модернизаций.
    for (i = 0; i < n; i++)
    {
        scanf("%d %d", &vi, &t);
        for (j = mx; j >= 0; j--)
            if (dp[j] + t < dp[j + vi]) dp[j + vi] = dp[j] + t;
        mx += vi;
    }
    //Для каждого значения прироста скорости i вычислим время, необходимое для преодоления
    //расстояния из пункта A в пункт B. Оно равно величине пути l, деленное на скорость
    //велосипедиста v + i, плюс время модернизации dp[i].Наименьшее из таких времен и будет искомым.
    double res = 1e10;
    for (i = 0; i <= mx; i++)
    {
        double temp = 1.0 * l / (v + i) + dp[i];
        if (temp < res) res = temp;
    }
    printf("%.6lf\n", res);
    return 0;
}





5. Сума дільників

Нехай n - натуральне число. Число d є його дільником, якщо 1dn та остача від ділення n на d дорівнює нулю. За заданим числом n знайдіть суму його дільників.

Вхідні дані
Одне ціле число n (1n1018), усі прості дільники якого не перевищують 1000.

Вихідні дані
Виведіть суму дільників числа n.

·         Ліміт часу 1 секунда
·         Ліміт використання пам'яті 128 MiB

Вхідні дані #1
12
Вихідні дані #1
28
Вхідні дані #2
239
Вихідні дані #2
240

#include <iostream>
 
using namespace std;
 
int main() {
    long n, p, res = 1;
    scanf("%lld", &n);
    for (int i = 2; i <= 1000; i++)
    {
        p = i;
        //Пусть i – простой делитель n. Находим максимальную
        //степень a, для которой i^a делит n.
        while (n % i == 0)
        {
            n /= i;
            p *= i;
        }
        //После выполнения цикла p = i^(a + 1).
        res *= (p - 1) / (i - 1);
    }
    printf("%ld\n", res);
    return 0;
}




2016-2017

Завдання та розв’язки


8-9 клас

1. Среднее число (№108)

Дано три различных числа a, b, c. Вывести среднее из них.

Входные данные

Числа a, b, c целые и по модулю не превышают 1000.

Выходные данные

Вывести среднее среди трех чисел.
var a,b,c:integer;
Begin
readln(a,b,c);
if (b<a) and (a<c) or (c<a) and (a<b)then writeln(a);
if (a<b) and (b<c) or (c<b) and (b<a)then writeln(b);
if (a<c) and (c<b) or (b<c) and (c<a)then writeln(c);
end.

2. Банкомат (№ 138)
В банкомате имеются в достаточном количестве купюры номиналом 10, 20, 50, 100, 200 и 500 гривен. Найти минимальное количество купюр, которое необходимо использовать, чтобы выдать сумму в n гривен или вывести -1, если указанную сумму выдать нельзя.
Входные данные
Одно число n (1 ≤ n ≤ 1000000).
Выходные данные
Наименьшее количество купюр, которыми можно выдать n гривен.
var n,k:longint;
begin
readln(n);
k:=0;
k:=k+n div 500; n:=n mod 500;
k:=k+n div 200; n:=n mod 200;
k:=k+n div 100; n:=n mod 100;
k:=k+n div 50; n:=n mod 50;
k:=k+n div 20; n:=n mod 20;
k:=k+n div 10; n:=n mod 10;
if n<>0 then writeln(-1) else writeln(k);
End.

3. Количество игрушек (№927)

Задано количество видов игрушек в магазине, количество игрушек каждого вида и стоимость игрушки каждого вида. Определить количество игрушек, стоимость которых меньше 50 грн.
Входные данные
В первой строке задано количество наличных в прейскуранте видов игрушек n (0  n  1000). В следующих n строках задано по 2 числа через пробел: сначала количество игрушек a (0  a  1000) очередного вида и их цена b (0 < b  10000) в грн.
Выходные данные
Вывести количество игрушек, стоимость которых меньше 50 грн.
var i,n,kol:integer;
otv:longint;
cena:real;
Begin
readln(n);
otv:=0;
for i:=1 to n do
begin
read(kol,cena);
if cena<50 then otv:=otv+kol;
end;
writeln(otv);

end.


4. Сдвинь элементы (№ 922)

Задан одномерный массив целых чисел длины n. Сдвинуть элементы массива вправо циклически на 1 шаг.

Входные данные

В первой строке задано количество элементов массива n (n  100). Во второй строке через пробел заданы сами элементы массива, значение каждого из которых по модулю не превышает 100.

Выходные данные

В одной строке вывести через пробел n чисел: новые значения элементов массива.
var a:array[1..100] of longint;
n,i,x:longint;
Begin
readln(n);
for i:=1 to n do
read(a[i]);
x:=a[n];
for i:=n downto 2 do
a[i]:=a[i-1];
a[1]:=x;
for i:=1 to n do write(a[i],' ');
end.

 




5. Покупка цветов (№ 891)

На День учителя Вася решил купить букет цветов. В магазине продаются ромашки по a рублей за штуку и гладиолусы по b рублей за штуку (a < b). У Васи есть c рублей. Он хочет составить букет из максимально возможного количества цветов, и при этом потратить как можно больше денег. Другими словами, из всех букетов с максимально возможным количеством цветов он хочет выбрать самый дорогой, но не дороже c рублей. Помогите ему вычислить стоимость такого букета.

Входные данные

Три целых числа abc (1 ≤ a < b ≤ 1000 ≤ c ≤ 1000).

Выходные данные

Выведите одно число - стоимость самого дорогого букета из максимального количества цветов.
var i_a,i_b,a,b,c,kol,stoim:longint; //Мое решение
Begin
readln(a,b,c);
kol:=0;stoim:=0;
for i_a:=0 to c div a do
for i_b:=0 to c div b do
if (i_a+i_b>=kol) and (a*i_a+b*i_b<=c) then kol:=i_a+i_b;
for i_a:=0 to c div a do
for i_b:=0 to c div b do
if i_a+i_b=kol then if (a*i_a+b*i_b>stoim) and (a*i_a+b*i_b<=c) then stoim:=a*i_a+b*i_b;
writeln(stoim);
end.

var a,b,c,m,t,k:longint; //решение Устинова
begin
  Readln(a,b,c);
  k:=c div a;
  m:=k*a;
  t:=m;
  while (k>0) and (t>=a) and (t-a+b<=c) do
  begin
    t:=t-a+b; dec( k );
    if t>m then m:=t;
  end;
  Writeln( m );

end.



10-11 клас

 

1. Несчастливый автобус (№ 247)


Витя живёт довольно далеко от школы, поэтому, чтобы не опаздывать на уроки, он ездит на автобусе. Витя - очень наблюдательный мальчик, он старается замечать все интересные совпадения, которые происходят в жизни. Однажды он заметил, что как только он садится в автобус, у которого номер в двоичном представлении второй цифрой справа имеет единичку, так его обязательно вызовут к доске отвечать заданный урок. А кто же любит ходить к доске?! Тем более, если накануне просидел за компьютером и не выучил уроки!!! Явно, что в таком случае грозит "двойка" ...
Помогите Вите составить список автобусов, которые он считает "несчастливыми" автобусами.
Входные данные
В певрой строке записано число N (0 ≤ N ≤ 100000) — количество автобусов, далее указаны номера автобусов mi (0 ≤ mi ≤ 231-1) по одному в строке.
Выходные данные
Выведите количество "несчастливых" автобусов.
var x,k,i,n:longint; //Мое решение
begin
k:=0;
readln(n);
for i:=1 to n do
begin
readln(x);
if ((x-2) mod 4=0) or ((x-3) mod 4=0) then k:=k+1;
end;
writeln(k);

end.

 

var i,n,t,k:longint; //Решение Устинова
begin
  k:=0;
  readln( n );
  for i:=1 to n do
  begin
    readln( t );
    if (t div 2) mod 2=1 then inc( k );
  end;
  writeln( k );

end.

 

 

 

2. Компакт-диски (№107)

Чистые компакт-диски продают в трёх видах упаковок. Упаковка из 100 дисков стоит 100 грн., из 20 дисков - 30 грн., а один диск стоит 2грн. Какую минимальную сумму нужно истратить для покупки n таких дисков?

Входные данные

Количество дисков n (n  1000).

Выходные данные

Вывести минимальную сумму в гривнах для покупки n дисков.
var n:integer;
k100,k20,k:integer;
begin
k100:=0;k20:=0;k:=0;
readln(n);
if n>=100 then begin k100:=n div 100; n:=n mod 100;end;
if n>=65 then k100:=k100+1
         else if n mod 20 <=14
         then begin k20:=n div 20;k:=n mod 20;end
         else k20:= n div 20+1;
writeln(100*k100+30*k20+2*k);
end.

3. Лицензионное ПО (№ 255)

Как вы знаете, для удостоверения лицензионности ПО используются серийные номера и регистрационные ключи. Вами, как ведущими разработчиками систем верификации лицензионности ПО была разработана идея надежнейшей в своём роде системы. Основывается она на цифровых корнях чисел. Теперь вам требуется написать программу, определяющую цифровой корень данного числа.
Для произвольного числа цифровой корень определяется следующим образом:
1.     Если сумма цифр числа меньше десяти, то цифровой корень и есть сумма цифр этого числа.
2.     В противном случае цифровой корень числа равен цифровому корню суммы его цифр.
Входные данные
Единственное число n (0  n  231- 1).
Выходные данные
Вывести одно число - ответ на поставленную задачу.
var sum:longint; //Мое решение
function s_chifr(x:longint):longint;
var a:integer;
begin
s_chifr:=0;
while x>0 do
begin
a:=x mod 10;
s_chifr:=s_chifr+a;
x:=x div 10;
end;
end;
Begin
readln(sum);
while sum>9 do
sum:=s_chifr(sum);
writeln(sum);
End.

var k,t,i:longint; //Решение Устинова
    s:string;
begin
  readln(s);
  if length(s)>1 then
  begin
    k:=0;
    for i:=1 to length(s) do
    begin
      k:=k+ord(s[i])-48;
    end;
    while k>9 do
    begin
      t:=0;
      while k>0 do
      begin
        t:=t+(k mod 10);
        k:=k div 10;
      end;
      k:=t;
    end;
    writeln(k);
  end else writeln(s);
end.

4. Кубики (№202)

Витэк еще в детсадике любил играть в кубики. Так как Витэк был в старшей группе, то на всех кубиках были большие буквы, да еще и английские. А так как детсадик был специализированным и детсадиковцев готовили как будущих разведчиков, то все они должны были знать английский язык. А возможно - и не разведчиков, а дипломатов, но и для этой профессии знание английского языка было необходимым. Витэк не очень хорошо запоминал все слова, что учили на занятиях в детсадике, но всегда мог запомнить самое длинное слово, которое на кубиках, что использовались на занятиях, читалось в обеих направлениях одинаково.
Сколько кубиков было использовано в слове, которое запомнил Витэк?
Входные данные: В первой строке – количество разложенных перед Витэком кубиков N (1 ≤ N ≤ 100000), в следующей строке последовательность N букв на кубиках без пробелов.
Выходные данные: Количество букв в самом длинном слове, которое запомнил Витэк.
var s:ansistring;
mas:array['A'..'Z'] of longint;
n,i,k:longint;
ch:char;
begin
k:=0;
readln(n);
readln(s);
for i:=1 to length(s) do
inc(mas[s[i]]);
for ch:='A' to 'Z' do
k:=k+mas[ch] div 2;
k:=K*2;
if k=n then writeln(k) else writeln(k+1);
end.

 

5*. Решение задач (№ 893)

В этой задаче Вася готовится к олимпиаде. Учитель дал ему N (1  N  100000) задач для тренировки. Для каждой из этих задач известно, каким умением ai нужно обладать для её решения. Это означает, что если текущее умение Васи больше либо равно заданного умения для задачи, то он может ее решить. Кроме того, после решения i-й задачи Васино умение увеличивается на число bi.
Исходное умение Васи равно A. Решать данные учителем задачи он может в произвольном порядке. Какое максимальное количество задач он сможет решить, если выберет самый лучший порядок их решения?
Входные данные
Сначала вводятся два целых числа N, A (1  N  100000, 0  A  109) - количество задач и исходное умение. Далее идут N пар целых чисел ai, bi (1  ai  109, 1  bi  109) - соответственно сколько умения нужно для решения i-й задачи и сколько умения прибавится после её решения.
Выходные данные
Выведите одно число - максимальное количество задач, которое Вася сможет решить.
type ch=record     //С использованием пузырьковой сортировки 70% тестов
a,b:longint;
end;
var mas:array[1..100000] of ch;
pr:ch;
i,j,n,um,kol:longint;
Begin
readln(n,um);
kol:=0;
 for i:=1 to n do
 read(mas[i].a,mas[i].b);

  for i := 1 to n-1 do
        for j := 1 to n-i do
            if mas[j].a > mas[j+1].a then begin
                pr := mas[j];
                mas[j] := mas[j+1];
                mas[j+1] := pr;
            end;
 for i:=1 to n do
 if um>=mas[i].a then begin kol:=kol+1;um:=um+mas[i].b;end;
 writeln(kol);
 End.


type z=record        //с использованием быстрой сортировки 100 тестов
       a,b:longint;
     end;
var n,i,k:longint;
    a:Int64;
    m:array[1..100000] of z;

procedure qSort(l,r:longint);
var i,j:longint;
    w,q:z;
begin
  i := l; j := r;
  q := m[(l+r) div 2];
  repeat
    while (m[i].a < q.a) do inc(i);
    while (q.a < m[j].a) do dec(j);
    if (i <= j) then
    begin
      w:=m[i]; m[i]:=m[j]; m[j]:=w;
      inc(i); dec(j);
    end;
  until (i > j);
  if (l < j) then qSort(l,j);
  if (i < r) then qSort(i,r);
end;

begin
  readln(n,a);
  i:=0; k:=0;
  while n>0 do
  begin
    Inc(i);
    Readln(m[i].a,m[i].b);
    if a>=m[i].a then
    begin
      a:=a+m[i].b;
      dec(i); inc(k);
    end;
    Dec(n);
  end;
  n:=i;
  qSort(1,n); i:=1;
  while (i<=n) and (a>=m[i].a) do
  begin
    a:=a+m[i].b;
    Inc(k); Inc(i);   
  end;
  Writeln(k);
end.

Джерело

Олімпіадні
завдання з інформатики
10 клас

  Опрацювання рядкових величин. Одновимірний масив, дії над елементами масиву.
    Завдання 1.
В рядку, який містить арифметичний вираз, перевірити чи правильно поставлені дужки.
У випадку лишніх дужок не рахувати неправильним розстановку дужок(наприклад: ((а+b)) – дужки поставлені правильно.

Обробка двовимірного масиву: заповнення, вивід елементів масиву, вставка, видалення елементів 
   Завдання 2.
Латинським квадратом називається масив, в рядках і стовпчиках якого немає одинакових елементів. Вивести на екран латинський квадрат розміром N x N.

1
2
3
4
5
5
1
2
3
4
4
5
1
2
3
3
4
5
1
2
2
3
4
5
1

Сортування елементів масиву, обмін місцями пари чисел.
        Завдання 3.
Відомо  ряд цілих  випадкових чисел. Перетворіть його в ряд чисел, між якими можна  було б розставити  знаки ‘<’  і  ‘>’ чередуючи їх.



    Завдання 1.
В рядку, який містить арифметичний вираз, перевірити чи правильно поставлені дужки.
У випадку лишніх дужок не рахувати неправильним розстановку дужок(наприклад: ((а+b)) – дужки поставлені правильно.
Розвязок.
  1. Допустимо, відомо такий вираз:
(a+b((4a-8)*b+3)-15b)
  1. Створимо два масиви:А і flag.
  2. Розібємо рядок, що містить вираз на окремі символи.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(
a
+
b
(
(
4
a
-
8
)
b
+
3
)
-
1
5
b
)
 Це так виглядає масив А.
А масив flag заповнити так:
Ставимо,  1 якщо  елемент масиву А – відкрита дужка
Ставимо,  -1 якщо  елемент масиву А – закрита  дужка

1


















20
1
0
0
0
1
1
0
0
0
0
-1
0
0
0
-1
0
0
0
0
-1
Знаходимо суму елементів масиву flag.
Якщо сума елементів буде відємна(отрицательна), то дужки розставлені неправильно.
Якщо сума дорівнює 0 тоді дужки розставлено правильно.
Програма.
Uses crt;
Const m=20;
Var flag:array[1..m] of integer;
       A:array[1..m] of string;
      Stroka:string;
   I, s, n, x:integer;
    Begin clrscr;
Writeln(‘vvesti stroky’);
Readln(stroka);
     N:=length(stroke);
  For i:=1 to n do
              Begin
    A[i]:=copy(stroka, I,1);
               Flag[i]:=0;
                     End;
For i:=1 to n do
        Begin
    If a[i]:=’(‘ then flag[i]:=1;
   If a[i]:=’)’ then flag[i]:= - 1;
                         End;
              S:=0;
For i:=1 to n do
                 Begin
S:=s+flag[i];
If s<0 then x:=1;
     End;
If (s=0) and (x=0) then writeln(‘verno’)
  Else writeln(‘ploho’); end.

Завдання 2.
Латинським квадратом називається масив, в рядках і стовпчиках якого немає одинакових елементів. Вивести на екран латинський квадрат розміром N x N.

1
2
3
4
5
5
1
2
3
4
4
5
1
2
3
3
4
5
1
2
2
3
4
5
1
Заповнити  перший рядок квадратного масиву (N x N) числами від 1 до N.
Другий рядок масиву получається шляхом циклічного зсуву елементів першого рядка. Циклічний зсув елементів получається використовуючи алгоритм
                   вставка - знищення .
uses crt;
var a:array[1..10, 1..10] of integer;
         n,I,j,x: integer;
begin clrscr;
writeln(‘razmer’);
readln(n);
   for j:=1 to n do
      a[1,j]:=j;
{   ---- сдвиг------}
For i:=2 to n do
 Begin
      For j:=1 to n do
              A[I,j]:=a[i-1,j];
                      X:=a[I,n];
For j:=n downto 2 do
  A[I,j]:=a[I,j-1];
A[I,1]:=x;
 End;
{  -------   new masiv  -------}
    For i:=1 to n do
 Begin
     For j:=1 to n do
                  Write(a[I,j]:3);
            Writeln; end;
  End.
Завдання 3.
Відомо  ряд цілих  випадкових чисел. Перетворіть його в ряд чисел, між якими можна  було б розставити  знаки ‘<’  і  ‘>’ чередуючи їх.
 Розвязування.
Ряд чисел сортуємо. Міняємо місцями кожну пару чисел.
Uses crt;
Var a:array[1..10] of integer;
      I,j,n,x:integer;
 Begin clrscr;
Writeln(‘kolichestvo chisel’);
  Readln(n);
For i:=1 to n do
   Begin
    Writeln(‘vvesti chislo’);
Readln(a[i]); end;
{ ----- sortyvannya----}
For j:=n downto 2 do
    For i:=1 to j-1 do
                If  a[i] > a[i+1] then  begin
                              X:=a[i];
                              A[i]:=a[i+1];
                            A[i+1]:=x; end;
        {-------- obmin ----------}
  X:=1;
For i:=1 to (n div 2) do
     Begin
              X:=a[j];
            A[j]:=a[j+1];
           A[j+1]:=x;
               J:=j+2;  end;
   For i:=1 to n do
        Writeln(a[i]);
End.
       Ввести числа 5, 2, 1, 8, 0, 67, 100



Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.