Как найти количество положительных чисел в последовательности

SadZhaba

2 / 2 / 0

Регистрация: 05.02.2017

Сообщений: 37

1

В последовательности целых чисел определить количество положительных чисел

02.10.2018, 17:57. Показов 2944. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

В последовательности целых чисел определить количество положительных чисел и количество элементов, значения которых находятся в интервале от –10 до -20.

Написал код, но он считает просто проходы по циклу фор, что не так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int main()
{
int n,a,q=0,k=0;
cin>>n;
for(int i = 0;i<n;i++)
    {
     cin>>a;
    do
        {
             q++;
             break;
        }
    while((a>=-20)&&(a<=-10));
    do 
    {
        k++;
        break;
    }
    while(a>0);
    }
cout<<"chisel [-20;-10] = "<<q<<endl;
cout<<"polozhitelnih chisel = "<<k<<endl;
system("pause");
return 0;
}



0



SuperKir

473 / 425 / 290

Регистрация: 10.03.2015

Сообщений: 1,782

02.10.2018, 18:51

2

У тебя все циклы do..while выполняются ровно 1 раз, до break.

C++
1
2
3
4
5
6
7
8
for(int i = 0;i<n;i++)
{
     cin>>a;
     if (a>0)
          k++;
     if (a>=-20 && a<=-10)
             q++;
}



0



SadZhaba

2 / 2 / 0

Регистрация: 05.02.2017

Сообщений: 37

03.10.2018, 18:01

 [ТС]

3

Пофиксил, теперь вот так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
int a,n,q=0,i=0;
int z =0;
int mishanya = 0;
cout<<"vvedite kol-vo chisel"<<endl;
cin>>n;
do
{
    cout<<"vvedite chislo "<<z<<endl;
    z++;
    cin>>a;
    if((a>=-20)&&(a<=-10))
    {q++;}
    if(a>0){mishanya++;}
    i++;}
    while(i<n);
    cout<<"chisel [-20;-10] "<<q<<endl;
    Sleep(300);
    cout<<"polozhitelnih chisel "<<mishanya<<endl;
system("pause");
}



0



Числовой последовательностью называют ряд чисел, полученных по некоторому правилу или формуле.

Например, правило «все положительные четные числа по возрастанию начиная с двойки» задает последовательность: (2; 4; 6; 8; 10…) А правило «первое число равно (3), а каждое следующее число в два раза больше предыдущего» формирует последовательность: (3; 6; 12; 24; 48….)

Ниже разобраны несколько разных способов задания числовых последовательностей.

Числа, образующие последовательность, называются ее членами
(или элементами). И каждое из этих чисел имеет свой порядковый номер.

Например, в последовательности (3; 6; 12; 24; 48…) тройка является первым членом (порядковый номер – один), шестерка – вторым (ее номер по порядку равен двум), двенадцать – третьим и т.д.

В математике последовательность обозначают маленькой латинской буквой, а каждый отдельный ее элемент – той же буквой с числовым индексом равным порядковому номеру этого элемента.

То есть, если последовательность (3; 6; 12; 24; 48…) обозначить как (a_n), то можно записать, что (a_1=3), (a_2=6), (a_3=12), (a_4=24) и так далее.

Иными словами, для последовательности (a_n={ 3;: 6; :12; : 24; : 48; : 96; : 192; : 384…}).

порядковый номер элемента

(1)

(2)

(3)

(4)

(5)

(6)

(7)

(8)

обозначение элемента

(a_1)

(a_2)

(a_3)

(a_4)

(a_5)

(a_6)

(a_7)

(a_8)

значение элемента

(3)

(6)

(12)

(24)

(48)

(96)

(192)

(384)

Отметим, что членами последовательности необязательно должны быть различные числа. Она может состоять из одних и тех же чисел, например, выглядеть вот так: (1; : 1; : 1; : 1…) .

Способы задания числовых последовательностей

Все способы формирования числовых последовательностей можно разделить на три большие группы:

— I способ: словесный. Здесь все просто – в буквальном смысле словами описывается каким образом можно вычислить элементы искомой последовательности.

Пример: Напишите первые пять членов последовательности квадратов натуральных чисел.

Решение: Натуральными называют числа, возникающие естественным образом при счете количества предметов, то есть: (1; : 2; : 3; : 4; : 5) и т.д. Нашу же последовательность формируют квадраты этих чисел, то есть (1^2;: 2^2; : 3^2; : 4^2; : 5^2…) . Таким образом, имеем ответ: (1; : 4; : 9; : 16; : 25…)

Ответ: (1; : 4; : 9; : 16; : 25…)

Отметим, что последовательности в начале статьи заданы именно словесным способом.

— II способ: аналитический (формулой энного члена). Тут значение каждого элемента последовательности вычисляется по некоторой формуле, в которую подставляется порядковый номер этого элемента.

Пример: Последовательность задана формулой: (b_n=frac{n-1}{n^2}). Вычислите первые пять членов этой последовательности.

Решение: Вычислим (b_1). Это первый член последовательности, то есть его порядковый номер (n) равен единице. Тогда его значение равно (b_1=frac{1-1}{1^2} =frac{0}{1}=0).
У второго члена (n=2), то есть его значение равно (b_2=frac{2-1}{2^2} =frac{1}{4}).
Третий ((n=3)):    (b_3=frac{3-1}{3^2} =frac{2}{9}).
Четвертый ((n=4)):     (b_4=frac{4-1}{4^2} =frac{3}{16}).
Пятый ((n=5)):     (b_5=frac{5-1}{5^2} =frac{4}{25}) .
Готово. Можно писать ответ.

Ответ: (b_n= {0; : frac{1}{4}; : frac{2}{9}; : frac{3}{16}; : frac{4}{25}…}).

Обратите внимание, что при таком задании последовательности, значение каждого элемента зависит только от его порядкового номера. И поэтому, если нам нужно вычислить, например, пятнадцатый элемент, мы можем это сделать сразу, не вычисляя предыдущие четырнадцать.

Пример: Последовательность задана формулой: (a_n=8+5n-n^2). Вычислите (a_9).

Решение: Нужно вычислить значение девятого элемента, то есть порядковый номер (n=9). Подставляем в формулу: (a_9=8+5·9-9^2=8+45-81=-28).

Ответ: (a_9=-28).

III способ: рекуррентное соотношение. Звучит страшно, но суть проста – здесь дается начало последовательности (один или несколько первых элементов) и правило, по которому из предыдущего (или нескольких предыдущих) членов последовательности можно вычислить следующий.

Пример: Последовательность задана условиями: (c_1=4), (c_{n+1}=c_n+3). Вычислите первые пять членов этой последовательности.

Решение: Первый член нам известен: (c_1=4).
Второй мы получим, подставив в формулу вместо (n) единицу: (c_{1+1}=c_1+3)
                                                                                                                     (c_2=c_1+3=4+3=7)
Третий ((n=2)):   (c_{2+1}=c_2+3 )
                                 (c_3=c_2+3=7+3=10).

Четвертый ((n=3)):     (c_{3+1}=c_3+3)
                                         (c_4=c_3+3=10+3=13).

Пятый ((n=4)):   (c_{4+1}=c_4+3)
                              (c_5=c_4+3=13+3=16).

Нужные пять элементов вычислены. Теперь можно записывать ответ.

Ответ: (c_n={4; : 7; : 10; : 13; : 16…}).

В этом примере мы по сути получали следующий элемент из предыдущего путем прибавления к предыдущему тройки. Логично, ведь формула (c_{n+1}=c_n+3) требовала именно этого. В ней (c_n) – это предыдущий элемент, а (c_{n+1}) – следующий за ним (ведь его номер на единицу больше).

На практике могут встречаться более сложные формулы, в которых следующий элемент вычисляется из двух, трех или даже большего количества предыдущих.

Пример: У последовательности известны первые два элемента (z_1=2;)   (z_2=5). Так же известна формула следующего элемента (z_{n+2}=3z_{n+1}-z_n). Вычислите значения третьего, четвертого и пятого членов.

Решение: Слева будем писать текущую последовательность, а справа вести вычисления очередного элемента.

Последовательность на данный момент:

Вычисления:

(z_1) (z_2) (z_3) (z_4) (z_5) (…)
(2) (5) ? ? ? (…)

Так как формула дана для элемента с номером (n+2), то чтобы найти (z_3) нужно подставлять вместо (n) единицу:
(z_{1+2}=3z_{1+1}-z_1)
(z_3=3z_2-z_1=3·5-2=13)

(z_1) (z_2) (z_3) (z_4) (z_5) (…)
(2) (5) (13) ? ? (…)

Теперь найдем (z_4), подставив вместо (n) двойку:
(z_{2+2}=3z_{2+1}-z_2)
(z_4=3z_3-z_2=3·13-5=34)
(z_1) (z_2) (z_3) (z_4) (z_5) (…)
(2) (5) (13) (34) ? (…)
Наконец вычисляем (z_5), подставляя вместо (n) тройку:
(z_{3+2}=3z_{3+1}-z_3)
(z_5=3z_4-z_3=3·34-13=89)
(z_1) (z_2) (z_3) (z_4) (z_5) (…)
(2) (5) (13) (34) (89) (…)
Готово. Можно писать ответ.

Ответ: (c_3=13); (c_4=34); (c_5=89).

Важное отличие рекуррентного способа задания последовательности от аналитического – при рекуррентном мы не можем посчитать следующий элемент, не зная предыдущих. То есть, если нам нужно вычислить, например, пятнадцатый элемент, придется сначала вычислить все, что идут до него.

Как определить является ли число элементом последовательности?

Во всех предыдущих примерах мы находили значения элементов последовательности – чему равен третий, пятый или девятый член. Иначе говоря, выясняли какое именно число стоит в последовательности на таком-то месте.

Но в практике встречается также обратная задача – значение известно и надо выяснить, есть ли оно среди элементов некоторой последовательности? А если есть, то на каком месте?

Пример (ОГЭ): Какое из чисел ниже есть среди членов последовательности (a_n=n^2-n):

а) (1)               б) (3)               в) (6)              г) (10) ?

Решение: Из условия задачи понятно, что одно из этих чисел точно является элементом последовательности. Поэтому мы можем просто вычислять элементы по очереди, пока не найдем нужный:

(a_1=1^2-1=0) – мимо.

(a_2=2^2-2=2) – тоже не то.

(a_3=3^2-3=6) – есть!

Нужный элемент найден.

Ответ: (6).

Такой метод решения годится только если заранее известно, что элемент точно в последовательности есть. Потому что если его вдруг там нет – это можно проверять вечность, последовательность ведь бесконечна!

Поэтому в такой ситуации пользуются следующим алгоритмом:

  1. Подставляют заданное число в формулу (n) -го члена вместо (a_n); 

  2. Решая полученное уравнение, находят неизвестное (n); 

  3. Если (n) – натуральное, то данное число — член последовательности.

Пример: Выяснить, является ли число (3) членом последовательности (a_n=)(frac{51+2n}{n+4}) ?

Решение:

(a_n=)(frac{51+2n}{n+4})

Если число (3) – член последовательности, то значит при некотором значении (n), формула (frac{51+2n}{n+4}) должна дать нам тройку. Найдем это (n) по алгоритму выше.
Подставляем тройку вместо (a_n).

(3=)(frac{51+2n}{n+4})

Решаем это уравнение. Умножаем левую и правую части на знаменатель ((n+4)).

(3cdot (n+4)=51+2n)

Получилось линейное уравнение
Раскрываем скобки слева.

(3n+12=51+2n)

Собираем неизвестные слева, числа справа…

(3n-2n=51-12)

…и приводим подобные слагаемые.

(n=39)

Готово. Найденное значение – это то число, которое надо подставить вместо (n) в формулу (frac{51+2n}{n+4}), чтоб получилось тройка (можете проверить это сами). Значит (39)-ый член последовательности равен трем.

Ответ: Да, число (3) является элементом данной последовательности.

Смотри также:
Арифметическая прогрессия
Геометрическая прогрессия

uses crt;
var n,i,a,p,p2:integer;
begin
clrscr;
write('Введите размер последовательности n=');
readln(n);
writeln('Введите целые положительные и отрицательные числа:');
i:=1;p:=0;p2:=0;
while i<=n do
 begin
  readln(a);
  if (a>=-10) and (a<=20) then
   begin
    if a>0 then  p:=p+1
    else if a<0 then p2:=p2+1;
   end;
  i:=i+1;
 end;
writeln('Количество положительных от 1 до 20=',p);
writeln('Количество отрицательных от -10 до -1=',p2);
readln
end.

Следующий вариант

var
a,i,n,pol,kol:integer;
begin
writeln('vvedite kolichestvo chisel');
readln(n);
for i:=1 to n do
begin
writeln('vvedite chislo');
readln(a);
if a>0 then inc(pol);
if (a>-10)and(a<20)then inc(kol);
end;
writeln('polojitelnyh=',pol);
writeln('v intervale=',kol);
readln;
end.

Формулировка задачи:

Дана последовательность n чисел.Определить количество положительных элементов.

Код к задаче: «Дана последовательность n чисел.Определить количество положительных элементов.»

textual

uses crt;
Var
 k:integer; {счетчик чисел}
 n:integer; {число чисел}
 ch:integer;
 i:integer;
 
BEGIN
 clrscr;
 k:=0;
 
  Writeln ('Vvedite shislo issleduemyx 4isel');
  readln (n);
  for i:=1 to n do
   begin
    readln (ch);
    if ch>=0 then
      k:=k+1;
   end;
 write ('Vsego polojitelnix: ');
 write (k); {не помню паскалевского эквивалента сишной printf}
 readln;
END.

Полезно ли:

14   голосов , оценка 3.714 из 5

}

printf(«a = «); scanf(«%lf», &a);

}

printf(«n = %dn», n); return 0;

}

Пример 2. В последовательности целых чисел найти максимальное количество положительных элементов, идущих подряд.

В программе ниже в качестве начального значения переменной max (максимальное количество подряд идущих положительных элементов) берется значение 0, так как максимум ищется среди неотрицательных элементов. Если же требуется найти минимум или максимум среди всех элементов некоторого конечного множества, элементами которого являются произвольные числа, то ни в коем случае нельзя в качестве начального значения для min и max брать излюбленное начинающими программистами число 0. Для этого случая имеется масса подходов, например в качестве начального значения можно взять произвольный элемент рассматриваемого множества.

#include <stdio.h>

int main( )

{

int a,

/* значение текущего элемента последовательности

*/

n,

/* количество подряд идущих положительных элементов */

max;

/* макс. количество подряд идущих полож. элементов

*/

max = 0; /* начальное значение максимума */

printf(«a = «); scanf(«%d», &a); while (a != 0)

{

n=0;

/* считаем количество подряд идущих положительных элементов */ while (a > 0)

{

51

n++; printf(«a = «);

scanf(«%d», &a);

}

if (n > max) max = n;

/* пробегаем все подряд идущие отрицательные элементы */ while (a < 0)

{

printf(«a = «); scanf(«%d», &a);

}

}

printf(«max = %dn», max); return 0;

}

Наглядность применения именно вложенных циклов, которые пробегают целые серии элементов, обладающих тем или иным свойством, как в предыдущем примере, показывают следующие примеры.

Пример 3. Пусть имеется последовательность целых чисел. Требуется вывести длины всех серий подряд идущих положительных и подряд идущих отрицательных элементов.

/* вариант с вложенными циклами */

/* вариант без вложенных циклов */

#include <stdio.h>

#include <stdio.h>

int main( )

int main( )

{

{

int a, n;

int a, n_plus, n_minus;

n = 0;

n_minus = n_plus = 0;

printf(«a = «);

printf(«a = «);

scanf(«%d», &a);

scanf(«%d», &a);

while (a != 0)

while (a != 0)

{

{

while (a > 0)

if (a > 0)

52

{

{

n++;

n_plus++;

printf(«a = «);

if (n_minus > 0)

scanf(«%d», &a);

{

}

printf(«-: %dn», n_minus);

if (n > 0)

n_minus = 0;

{

}

printf(«+: %dn», n);

}

n = 0;

else

}

{

while (a < 0)

n_minus++;

{

if (n_plus > 0)

n++;

{

printf(«a = «);

printf(«+: %dn», n_plus);

scanf(«%d», &a);

n_plus = 0;

}

}

if (n > 0)

}

{

printf(«a = «);

printf(«-: %dn», n);

scanf(«%d», &a);

n = 0;

}

}

/*после цикла нужна еще одна проверка*/

}

if (n_minus > 0)

return 0;

printf(«-: %dn», n_minus);

}

if (n_plus > 0)

printf(«+: %dn», n_plus);

return 0;

}

Пример 4. В последовательности целых чисел найти длины участков строгой монотонности. Например, в последовательности 1, 2, 3, 2, 2 имеются два участка строгой монотонности, а именно 1,

2, 3 и 3, 2.

#include <stdio.h> int main( )

{

int a, /* значение предыдущего элемента последовательности */

53

b,

/* значение текущего элемента последовательности

*/

n;

/* длина участка строгой монотонности

*/

printf(«a = «); scanf(«%d», &a); if (a != 0)

{

n = 1; printf(«b = «);

scanf(«%d», &b); while (b != 0)

{

/* участок монотонного возрастания */ while (b != 0 && b > a)

{

n++; a = b;

printf(«b = «); scanf(«%d», &b);

}

if (n > 1)

{

printf («n = %dn», n); n = 1;

}

/* участок монотонного убывания */ while (b != 0 && b < a)

{

n++; a = b;

printf(«b = «); scanf(«%d», &b);

}

if (n > 1)

{

printf («n = %dn», n); n = 1;

}

54

/* пробегаем все подряд идущие одинаковые элементы */ while (b != 0 && b == a)

{

printf(«b = «); scanf(«%d», &b);

}

}

}

return 0;

}

4.2.Задачи

1.Найти сумму и количество элементов последовательности.

2.Дано число k и последовательность действительных чисел. Вывести номер первого элемента последовательности, большего k.

3.Проверить, является ли данная последовательность возрастающей.

4.Вывести номера тех элементов последовательности, которые меньше своего левого соседа, и количество таких элементов.

5.Найти количество элементов последовательности, расположенных перед первым минимальным элементом.

6.В последовательности целых чисел найти максимальное количество четных элементов, идущих подряд.

7.Пусть имеется последовательность целых чисел. Требуется вывести длины всех серий подряд идущих четных и подряд идущих нечетных элементов.

8.В последовательности целых чисел найти количество участков строгого возрастания последовательности и вывести на экран длины данных участков.

9.Найти номер элемента последовательности, с которого начинается самая длинная подпоследовательность подряд идущих одинаковых чисел, и количество элементов в этой подпоследовательности.

55

Задачи для самостоятельной работы

10.Найти в последовательности минимальное положительное число.

11.Дано число k и последовательность действительных чисел. Вывести номер последнего элемента последовательности, большего k.

12.Вывести номера тех элементов последовательности, которые больше своего правого соседа, и количество таких элементов.

13.Пусть имеется последовательность действительных чисел, содержащая по крайней мере две единицы. Найти сумму элементов последовательности, расположенных между первой и последней единицей.

14.Найти два наименьших элемента последовательности и вывести эти элементы в порядке возрастания их значений.

15.Найти номер первого минимального и номер последнего максимального элементов последовательности.

16.Найти количество элементов, расположенных после последнего максимального элемента последовательности.

17.Найти количество элементов, расположенных между первым и последним максимальным элементом последовательности. Если в наборе имеется единственный максимальный элемент, то сообщить об этом.

18.Найти максимальное количество подряд идущих минимальных элементов последовательности.

56

5.ОДНОМЕРНЫЕ МАССИВЫ

5.1.Начальные сведения о массивах

Вотличие от обычных переменных, которые хранят одно значение, массивы используются для хранения целого набора однотипных значений. Массив – набор однотипных элементов, последовательно располагающихся в памяти компьютера. Для определения массива необходимо указать тип элементов, которые в него входят, и максимальное количество элементов, которое может быть помещено в массив. Например:

#include <stdio.h> #include <stdlib.h> #include <time.h>

#define N 10 /* количество элементов массива */ int main( )

{

int a[N],

/* массив a размера N */

i;

/* счетчик */

srand(time(NULL)); for (i = 0; i < N; i++)

{

a[i] = rand()%100; printf(«%dn», a[i]);

}

return 0;

}

В нашем случае определяется массив a из 10 целых элементов (то есть блок из 10 последовательно расположенных элементов типа int), который заполняется случайными числами в диапазоне от 0 до 99. Заметим, что нумерация элементов массива начинается с 0. Поэтому к элементам массива a необходимо обращаться таким обра-

зом: a[0], a[1], …, a[N-1].

57

В нашем примере фигурирует функция srand() из библиотеки <stdlib.h>, которая устанавливает исходное число для последовательности, которая генерируется функцией rand():

void srand(unsigned long x)

Часто данная функция применяется для того, чтобы при различных запусках программы функция rand() генерировала различные последовательности псевдослучайных чисел. Например, в приведенной программе в качестве параметра функция srand() получает системное время.

Номер позиции элемента, содержащийся в квадратных скобках, называют индексом элемента. Индекс должен быть целым числом или целочисленным выражением.

После того как массив определен, его можно инициализировать. Инициализация массива означает, что при его объявлении элементам данного массива будут присвоены начальные значения. Например,

int a[5] = {10, 20, 30, 40, 50};

После такой инициализации мы будем иметь целочисленный массив из пяти элементов со следующими значениями:

a[0]=10, a[1]=20, a[2]=30, a[3]=40, a[4]=50.

Если при инициализации размер массива не указан, то размер определяется по числу начальных значений. Например, массив из 5 целых чисел, приведенный выше, можно сконструировать следующим образом:

int a[] = {10, 20, 30, 40, 50};

Если инициализируемых значений массива меньше, чем всех элементов массива, тогда остальные элементы автоматически инициализируются нулями. Например, если инициализировать массив следующим образом:

int a[10] = {0};

то все элементы данного массива будут иметь нулевое значение. Заметим, что массивы не инициализируются нулями автома-

тически. Для этой цели следует инициализировать хотя бы один элемент.

58

Чтобы узнать объем памяти, занимаемый тем или иным массивом, можно к имени данного массива применить оператор sizeof(), например:

#include <stdio.h> int main( )

{

int a[10];

printf(«%dn», sizeof(a)); return 0;

}

В этом случае также можно узнать и размерность (количество элементов) массива с помощью выражения: sizeof(a)/sizeof(*a).

5.2. Примеры работы с массивами

Пример 1. Проверить, образуют ли элементы целочисленного массива арифметическую прогрессию.

#include <stdio.h> #include <stdlib.h> #define N 10

/* модификатор const указывает на то, что значения элементов */

/* массива a и значение n менять нельзя

*/

int Progression(const int *a, const int n)

{

int d, i;

d = a[1] – a[0];

i = 1;

while ((++i < n) && (a[i] – a[i – 1] == d))

;

return (i >= n);

}

59

int main( )

{

int i, a[N];

for (i = 0; i < N; i++) a[i] = rand()%10;

printf(“%sn”, Progression(a, N) ? “progression” :”no progression”); return 0;

}

Пример 2. Определить, все ли элементы массива a попарно различны.

Произвольный случай. В нижеприведенной программе переменная flag играет роль логической переменной. Она инициализируется с начальным значением 1 (истина), то есть будем считать, что по умолчанию все элементы массива попарно различны. Сначала будем сравнивать все элементы с индексами 1, 2, …, n-1 с элементом a[0], затем все элементы с индексами 2, 3, …, n-1 с элементом a[1] и т.д. Как только находится пара одинаковых элементов, процесс останавливается и функция Check() возвращает нулевое (ложное) значение. В противном случае функция возвращает значение 1 (истинна).

int Check(const double *a, const int n)

{

int i, j, flag = 1;

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

{

for(j = 0; j < i && a[i] != a[j]; j++)

;

flag = (i == j);

}

return flag;

}

Упорядоченный массив. Если требуется выполнить ту же задачу, но известно, что массив является упорядоченным (по воз-

60

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
  • Как найти срочно работников
  • Как найти доллар в wacky wizards
  • Как найти бесплатные сайты для скачивания книг
  • Как найти человека в группе вайбер
  • Как найти свою легенду в апекс