
Вопрос задан 18.03.2019 в 20:48.
Предмет Информатика.
Спрашивает Тимофеев Константин.
Нужно написать программу на pascal abc



Ответы на вопрос

Отвечает Асылбеков Нурадил.
//Данный алгоритм использует большое количество системных ресурсов. Например, для 10000 результат вычислялся 2 минуты, ну Вы поняли. Приношу свои извинения.
//PascalABC.NET 3.2 сборка 1318
Var
ma:array of string;
arr:array of integer;
n,GroupCount,i,j,CountOfFails,k,mass:integer;
b:boolean;
s:string;
begin
GroupCount:=1;
CountOfFails:=0;
b:=true;
read(n);
setlength(ma,GroupCount);
ma[0]:='1,';
for i:=2 to n do
begin
for j:=0 to GroupCount-1 do
begin
s:=ma[j];
mass:=0;
while pos(',',s)<>0 do
begin
inc(mass);
setlength(arr,mass);
arr[mass-1]:=strtoint(copy(s,1,pos(',',s)-1));
delete(s,1,pos(',',s));
end;
for k:=0 to mass-1 do
if i mod arr[k]=0 then
begin
b:=false;
inc(CountOfFails);
break;
end;
if b=true then
begin
ma[j]+=inttostr(i)+',';
break;
end;
if (b=false) and (CountOfFails=GroupCount) then
begin
inc(GroupCount);
setlength(ma,GroupCount);
ma[j+1]:=inttostr(i)+',';
end;
b:=true;
end;
CountOfFails:=0;
b:=true;
end;
{writeln('End of main cycle reached'); //если хочется посмотреть разбивку
for j:=0 to GroupCount-1 do
writeln('Group #',j+1,':',ma[j]);
writeln('---------------------');}
writeln(GroupCount);
end.
Пример ввода:
10000
Пример вывода:
14
//PascalABC.NET 3.2 сборка 1318
Var
ma:array of string;
arr:array of integer;
n,GroupCount,i,j,CountOfFails,k,mass:integer;
b:boolean;
s:string;
begin
GroupCount:=1;
CountOfFails:=0;
b:=true;
read(n);
setlength(ma,GroupCount);
ma[0]:='1,';
for i:=2 to n do
begin
for j:=0 to GroupCount-1 do
begin
s:=ma[j];
mass:=0;
while pos(',',s)<>0 do
begin
inc(mass);
setlength(arr,mass);
arr[mass-1]:=strtoint(copy(s,1,pos(',',s)-1));
delete(s,1,pos(',',s));
end;
for k:=0 to mass-1 do
if i mod arr[k]=0 then
begin
b:=false;
inc(CountOfFails);
break;
end;
if b=true then
begin
ma[j]+=inttostr(i)+',';
break;
end;
if (b=false) and (CountOfFails=GroupCount) then
begin
inc(GroupCount);
setlength(ma,GroupCount);
ma[j+1]:=inttostr(i)+',';
end;
b:=true;
end;
CountOfFails:=0;
b:=true;
end;
{writeln('End of main cycle reached'); //если хочется посмотреть разбивку
for j:=0 to GroupCount-1 do
writeln('Group #',j+1,':',ma[j]);
writeln('---------------------');}
writeln(GroupCount);
end.
Пример ввода:
10000
Пример вывода:
14


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili