Выяснить, сколько различных строк можно получить из исходной строки, переставляя '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.
Объяснение кода листинга программы
- Объявлены переменные i, n, num0, num1, s, а также функция fact(k: integer).
- В функции fact(k: integer) объявлены переменные i, f.
- В основной программе открывается файл input.txt для чтения и файл output.txt для записи.
- Считывается количество строк из файла input.txt и сохраняется в переменной n.
- Считывается исходная строка из файла input.txt и сохраняется в переменной s.
- Переменные num1 и num0 инициализируются нулями.
- Происходит цикл по строкам исходной строки.
- Если символ в строке равен '1', то увеличивается значение переменной num1.
- Если символ в строке равен '0', то увеличивается значение переменной num0.
- Записывается результат вычисления функции fact(n) / (fact(num0) * fact(num1)) в файл output.txt.
- Файлы input.txt и output.txt закрываются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д