Складіть блок-схему алгоритму, у якому потрібно задумати число та відняти від нього 1, якщо воно меньше ніж 8; додати до нього 15, якщо воно не менше ніж 8, але меньше ніж 30; помножити його на 5, якщо воно не менше ніж 30. Виконайте складений алгоритм для чисел 4 ; 20; 52.
#include <iostream>
using namespace std;
int main()
{
int N; cin >> N;
int list[N];
int a = 0;
while (a < N)
{
int n; cin >> n;
list[a] = n;
a ++;
}
int flag_2 = 0;
a = 0;
while (a < N)
{
int b = 0;
int flag = 0;
while (b < N)
{
if (list[a] == list[b])
{
flag ++;
flag_2 ++;
}
b ++;
}
if (flag > 1) cout << list[a] << " ";
a ++;
}
if (flag_2 <= N) cout << 0;
}
1) ответ выводится не списком, а просто отдельными числами через пробел
2) каждое повторяющееся число выводится несколько раз(столько, сколько встречается)
3) в конце вывода лишний пробел
Могу решить на пайтоне, если важно просто закрыть задачу. А так, судя по всему, решение только массивами требует более глубоких знаний(динамические массивы и векторы), чем есть у меня в с++. Возможно, сможете улучшить мое решение
(кинул бы в комментарии, но там ограничение на кол-во символов)
var
i,a,b:integer;
ar:array[1..10] of integer;
procedure oddDec(var a,b:integer); //подпрограмме переданы аргументы a и b
//процедура для вычитания в нечётном элементе
begin;
a:=a-b;
end;
procedure NotoddInc(var a,b:integer); //подпрограмме переданы аргументы a и b
//процедура для сложения в чётном элементе
begin;
a:=a+b;
end;
begin
randomize;
readln(a); //ввод a
readln(b); //ввод b
writeln('Array:');
for i:=1 to 10 do //весь массив
begin;
ar[i]:=random(-20,80); //случайные числа от -20 до 80 включительно
write(ar[i]:4); //вывод
if odd(i) then oddDec(ar[i],b) else NotoddInc(ar[i],a);
{если нечётное, то первая процедура, иначе вторая. Обращаю внимания на то, что элементы меняются сразу после вывода}
end;
writeln;
writeln('Final array:'); //вывод получившегося массива
for i:=1 to 10 do
write(ar[i]:4);
end.
Пример ввода:
20
10
Пример вывода:
Array:
10 16 0 60 23 4 22 -20 4 55
Final array:
0 36 -10 80 13 24 12 0 -6 75