Если текущее число равно n, то последняя цифра в нем - остаток от деления на 10. В цикле проверяем, если последняя цифра числа 8, то увеличиваем переменную-счетчик восьмерок. После этого отбрасываем последнюю цифру. В конце полученное количество умножаем на 1000 и выводим на экран.
{ PascalABC.Net } const nn=100; var a:array[1..nn] of integer; n:integer;
procedure aInit(p,q:integer); { Инициализирует массив случайными целыми значениями из интервала [p;q] } var i,k:integer; begin Randomize; k:=q-p+1; for i:=1 to n do a[i]:=Random(k)+p end;
procedure aOut(k:integer); { Выводит в строку значения эементов массива, отводя элементу k позиций } var i:integer; begin for i:=1 to n do Write(a[i]:k); Writeln end;
function aMax():integer; { Возвращает максимальное значение элемента в массиве } var i,m:integer; begin m:=a[1]; for i:=2 to n do if m<a[i] then m:=a[i]; aMax:=m end;
function SumBeforeLastPositive():integer; { Возвращает сумму элементов массива, расположенных до последнего положительного элемента } var i,j,s:integer; flag:boolean; begin i:=n; flag:=false; while (not flag) and (i>=1) do begin flag:=(a[i]<=0); if not flag then Dec(i) end; s:=0; for j:=1 to i-1 do s:=s+a[j]; SumBeforeLastPositive:=s end;
procedure aShrink(pa,pb:integer); { Процедура сжимает массив, удаляя из него элементы, модуль которых находится в интервале [pa;pb]. Освободившийся элементы заполняются нулями. } var i,j,k:integer; flag:boolean; begin k:=0; i:=1; while i<=n do if a[i] in [pa..pb] then begin if k=0 then k:=i-1; j:=i+1; flag:=false; while (not flag) and (j<=n) do begin flag:=not (a[j] in [pa..pb]); if not flag then Inc(j); end; if flag then begin Inc(k); a[k]:=a[j]; i:=j+1 end else i:=n+1 end else begin Inc(k); a[k]:=a[i]; Inc(i) end; for i:=k+1 to n do a[i]:=0 end;
var p,q,k,b,c:integer; begin Write('Укажите количество членов в массиве: '); Read(n); Write('Укажите интервал значений элементов массива: '); Read(p,q); Write('Укажите интервал исключаемых элементов массива: '); Read(b,c); Write('Укажите количество позиций для вывода значений элемента: '); Read(k);
aInit(p,q); Write('Исходный массив'); aOut(k); Writeln('Значение максимального элемента равно ',aMax()); Writeln('Сумма до последнего положительного равна ',SumBeforeLastPositive()); Writeln('Сжатый массив'); aShrink(b,c); aOut(k) end.
Тестовое решение: Укажите количество членов в массиве: 15 Укажите интервал значений элементов массива: -6 9 Укажите интервал исключаемых элементов массива: -2 3 Укажите количество позиций для вывода значений элемента: 3 Исходный массив 7 7 7 -1 5 5 -5 6 0 -1 3 2 -4 1 8 Значение максимального элемента равно 8 Сумма до последнего положительного равна 35 Сжатый массив 7 7 7 5 5 -5 6 -4 8 0 0 0 0 0 0
Если текущее число равно n, то последняя цифра в нем - остаток от деления на 10. В цикле проверяем, если последняя цифра числа 8, то увеличиваем переменную-счетчик восьмерок. После этого отбрасываем последнюю цифру. В конце полученное количество умножаем на 1000 и выводим на экран.
Код (C++):
#include <iostream>
int main() {
int n, count = 0;
std::cin >> n;
while (n > 0) {
if (n % 10 == 8) count++;
n /= 10;
}
std::cout << count * 1000;
}
Пример ввода:
88880
Пример вывода:
4000
const
nn=100;
var
a:array[1..nn] of integer;
n:integer;
procedure aInit(p,q:integer);
{ Инициализирует массив случайными целыми значениями из интервала [p;q] }
var
i,k:integer;
begin
Randomize;
k:=q-p+1;
for i:=1 to n do a[i]:=Random(k)+p
end;
procedure aOut(k:integer);
{ Выводит в строку значения эементов массива, отводя элементу k позиций }
var
i:integer;
begin
for i:=1 to n do Write(a[i]:k);
Writeln
end;
function aMax():integer;
{ Возвращает максимальное значение элемента в массиве }
var
i,m:integer;
begin
m:=a[1];
for i:=2 to n do
if m<a[i] then m:=a[i];
aMax:=m
end;
function SumBeforeLastPositive():integer;
{ Возвращает сумму элементов массива,
расположенных до последнего положительного элемента }
var
i,j,s:integer;
flag:boolean;
begin
i:=n; flag:=false;
while (not flag) and (i>=1) do begin
flag:=(a[i]<=0);
if not flag then Dec(i)
end;
s:=0;
for j:=1 to i-1 do s:=s+a[j];
SumBeforeLastPositive:=s
end;
procedure aShrink(pa,pb:integer);
{
Процедура сжимает массив, удаляя из него элементы,
модуль которых находится в интервале [pa;pb].
Освободившийся элементы заполняются нулями.
}
var
i,j,k:integer;
flag:boolean;
begin
k:=0; i:=1;
while i<=n do
if a[i] in [pa..pb] then
begin
if k=0 then k:=i-1;
j:=i+1; flag:=false;
while (not flag) and (j<=n) do begin
flag:=not (a[j] in [pa..pb]);
if not flag then Inc(j);
end;
if flag then begin Inc(k); a[k]:=a[j]; i:=j+1 end
else i:=n+1
end
else begin Inc(k); a[k]:=a[i]; Inc(i) end;
for i:=k+1 to n do a[i]:=0
end;
var
p,q,k,b,c:integer;
begin
Write('Укажите количество членов в массиве: ');
Read(n);
Write('Укажите интервал значений элементов массива: ');
Read(p,q);
Write('Укажите интервал исключаемых элементов массива: ');
Read(b,c);
Write('Укажите количество позиций для вывода значений элемента: ');
Read(k);
aInit(p,q);
Write('Исходный массив'); aOut(k);
Writeln('Значение максимального элемента равно ',aMax());
Writeln('Сумма до последнего положительного равна ',SumBeforeLastPositive());
Writeln('Сжатый массив');
aShrink(b,c); aOut(k)
end.
Тестовое решение:
Укажите количество членов в массиве: 15
Укажите интервал значений элементов массива: -6 9
Укажите интервал исключаемых элементов массива: -2 3
Укажите количество позиций для вывода значений элемента: 3
Исходный массив 7 7 7 -1 5 5 -5 6 0 -1 3 2 -4 1 8
Значение максимального элемента равно 8
Сумма до последнего положительного равна 35
Сжатый массив
7 7 7 5 5 -5 6 -4 8 0 0 0 0 0 0