Напишите программу в паскаль, пожалуйста))) даю 50 баллов)) Определить количество...

0 голосов
21 просмотров

Напишите программу в паскаль, пожалуйста))) даю 50 баллов))

Определить количество повторений каждой из цифр 0,1,2,...,9 в числе n!, где n≤9, n-натуральное.

Напоминание: n! = 1*2*3*4*….*n.


Информатика (21 баллов) | 21 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

Var
  a:array[0..9] of integer; { число повторений }
  i,n,d,p:integer;

begin
  Write('n = '); Read(n);
  for i:=0 to 9 do a[i]:=0; { обнулить счетчики }
  p:=1;
  for i:=2 to n do p:=p*i;
  Writeln(n,'! = ',p);
  while p>0 do begin
    d:=p mod 10;
    a[d]:=a[d]+1;
    p:=p div 10
    end;
  Writeln('Количество повторений цифр в числе:');
  for i:=0 to 9 do
    if a[i]>0 then Write(i,'-',a[i],' ');
  Writeln
end.

Пример
n = 9
9! = 362880
Количество повторений цифр в числе:
0-1 2-1 3-1 6-1 8-2

второй вариант

// PascalABC.NET 3.3, сборка 1634 от 14.02.2018
// Внимание! Если программа не работает, обновите версию!

begin
  var n:=ReadInteger('n=');
  var p:=2.to(n).Aggregate(1,(a,b)->a*b); // факториал
  Writeln(n,'! = ',p);
  Writeln('Количество повторений цифр в числе:');
  foreach var i in
    p.ToString.GroupBy(t->t).Select(t->(t.Key,t.Count)).OrderBy(t->t[0]) do
    Write(i[0],'-',i[1],' ');
  Writeln
end.

(150k баллов)
0 голосов

//PascalABC.NET
//Версия 3.3, сборка 1634
function f(n: integer): integer;
begin
var fx:=1;
for var i:=2 to n do fx:=fx*i;
f:=fx;
end;
begin
var n:=ReadInteger('n=');
for var i:=0 to 9 do writeln('цифра ',i,' повторяется в числе ',f(n),' ',f(n).ToString.Where(x->x.ToDigit=i).Count,' раз' );
end.

(149k баллов)