Выяснить, сколько различных строк можно получить из исходной строки, переставляя '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 закрываются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д