Выяснить, сколько различных строк можно получить из исходной строки, переставляя '0' и '1' - Free Pascal

Узнай цену своей работы

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

Строка длины N составлена из символов '0' и '1'. Если в ней сделать перестановку двух каких-либо разных символов – поменять местами '0' и '1', – то, конечно же, мы получим совсем другую строку. Если в полученной строке снова выполнить перестановку, а потом ещё одну, и ещё и т.д., то мы будем получать всё новые и новые строки. Требуется выяснить, сколько же различных строк можно получить из исходной строки, переставляя '0' и '1' неограниченное число раз. Формат файла входных данных: В первой строке входного файла input.txt записано натуральное число N (1 ≤ N ≤ 30). Во второй строке – символьная строка длины N, состоящая из '0' и '1'. Формат файла выходных данных: В единственной строке выходного файла output.txt должно быть записано количество различных строк (включая исходную строку), которые можно получить из исходной строки, переставляя '0' и '1' неограниченное число раз. Пример: input.txt output.txt 3 010 3 решение проходит 8 тестов из 20 :-(
var n,i,ke,kn,r:integer;
    a:char;
begin
 assign(input,'input.txt');reset(input);
 assign(output,'output.txt');rewrite(output);
 readln(n);
 kn:=0;
 ke:=0;
 for i:=1 to n do
  begin
   read(a);
   if a='0'then inc(kn)
           else inc(ke)
  end;
 r:=1;
 if (kn>0)and(ke>0) then r:=r+kn*ke;
 write(r)
end.
что не так, подскажите пожалуйста

Решение задачи: «Выяснить, сколько различных строк можно получить из исходной строки, переставляя '0' и '1'»

textual
Листинг программы
var
  i,n:integer;  
  num0,num1:integer;
  s:string;
function fact(k:integer):real;
var
 i:integer;
 f:real;
begin
  f:=1;
  for i:=2 to k do f:=f*i;
  fact:=f;
end;  
begin
 assign(input,'input.txt');reset(input);
 assign(output,'output.txt');rewrite(output);
 readln(n);
  readln(s);
  num1:=0;num0:=0;
  for i:=1 to n do 
    if s[i]='1' then inc(num1) else inc(num0);
  writeln(fact(n)/(fact(num0)*fact(num1)));
close(input);
close(output);
end.

Объяснение кода листинга программы

  1. Объявлены переменные i, n, num0, num1, s, а также функция fact(k: integer).
  2. В функции fact(k: integer) объявлены переменные i, f.
  3. В основной программе открывается файл input.txt для чтения и файл output.txt для записи.
  4. Считывается количество строк из файла input.txt и сохраняется в переменной n.
  5. Считывается исходная строка из файла input.txt и сохраняется в переменной s.
  6. Переменные num1 и num0 инициализируются нулями.
  7. Происходит цикл по строкам исходной строки.
  8. Если символ в строке равен '1', то увеличивается значение переменной num1.
  9. Если символ в строке равен '0', то увеличивается значение переменной num0.
  10. Записывается результат вычисления функции fact(n) / (fact(num0) * fact(num1)) в файл output.txt.
  11. Файлы input.txt и output.txt закрываются.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы