Выяснить, сколько различных строк можно получить из исходной строки, переставляя '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 :-(
Листинг программы
  1. var n,i,ke,kn,r:integer;
  2. a:char;
  3. begin
  4. assign(input,'input.txt');reset(input);
  5. assign(output,'output.txt');rewrite(output);
  6. readln(n);
  7. kn:=0;
  8. ke:=0;
  9. for i:=1 to n do
  10. begin
  11. read(a);
  12. if a='0'then inc(kn)
  13. else inc(ke)
  14. end;
  15. r:=1;
  16. if (kn>0)and(ke>0) then r:=r+kn*ke;
  17. write(r)
  18. end.
что не так, подскажите пожалуйста

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

textual
Листинг программы
  1. var
  2.   i,n:integer;  
  3.   num0,num1:integer;
  4.   s:string;
  5. function fact(k:integer):real;
  6. var
  7.  i:integer;
  8.  f:real;
  9. begin
  10.   f:=1;
  11.   for i:=2 to k do f:=f*i;
  12.   fact:=f;
  13. end;  
  14. begin
  15.  assign(input,'input.txt');reset(input);
  16.  assign(output,'output.txt');rewrite(output);
  17.  readln(n);
  18.   readln(s);
  19.   num1:=0;num0:=0;
  20.   for i:=1 to n do
  21.     if s[i]='1' then inc(num1) else inc(num0);
  22.   writeln(fact(n)/(fact(num0)*fact(num1)));
  23. close(input);
  24. close(output);
  25. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы