IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Число, Числа больше заданного составленные из тех же цифр
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Оля

Репутация: -  0  +


Вводится некоторое натуральное число N, состоящее не более чем из 8 различных цифр (первая – не 0). Определить, сколько существует различных чисел, больших N и составленных из тех же цифр (и в тех же количествах), что и N.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Насколько я понимаю, твою задачу можно привести к следующему:

1) по заданной перестановке найти ее номер в списке перестановок, упорядоченных лексикографически;
2) определить общее число перестановок, возможное с заданными цифрами;
3) вычесть из второго числа первое (пользуясь тем, что лексикографически упорядоченные перестановки с бОльшими номерами будут давать бОльшие числа).

Тогда тебе сюда: http://alglib.sources.ru/combinatorial/permutations.php

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Оля

Репутация: -  0  +


Большое спасобо за совет. Только помогите практически решить эту задачуб так как в указанной ссылке нет Паскаля, только Делфи и СИ. Буду очень благодарна за Вашу помощь.
Оля.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
в указанной ссылке нет Паскаля, только Делфи и СИ
В программе, на Дельфи, приведенной по ссылке, нет ничего, что не компилировалось бы в Паскале... (
var x : TInteger1DArray
можно заменить на
var X: array of integer
)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Оля

Репутация: -  0  +


Все так и сделала - заменила var x : TInteger1DArray на var X: array of integer. Но там описана только функция, а не знаю куда вставить тело цикла. Пожалуйста, помоги доделать программу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской
Реальное имя: Юра

Репутация: -  1  +


вот что получилось у меня

program perm;
uses CRT;
var
i,n,kol:Longint;
x:array[1..8] of integer;

function NextPermutation:Boolean;
var
k : Integer;
t : Integer;
y : Integer;
begin

{ //
// Check
//}
if N<=0 then
begin
NextPermutation := False;
Exit;
end;
K:=1;
while K<=N do
begin
if (X[K]<1) or (X[K]>N) then
begin
NextPermutation := False;
Exit;
end;
Inc(K);
end;

{ //
// Process
//}
k := n-1;
while k>0 do
begin
if x[k]<=x[k+1] then
begin
Break;
end;
k := k-1;
end;
if k<>0 then
begin
t := k+1;
while t<n do
begin
if x[t+1]<=x[k] then
begin
Break;
end;
t := t+1;
end;
y := x[k];
x[k] := x[t];
x[t] := y;
t := 0;
while t<(n-k) div 2 do
begin
y := x[n-t];
x[n-t] := x[k+1+t];
x[k+1+t] := y;
t := t+1;
end;
NextPermutation := True;
end
else
begin
NextPermutation := False;
end;
end;


begin
write('Введите n:');
readln(n);
kol:=0;
for i:=1 to n do
begin
write('введите ',i,'-ую цифру числа: ');
readln(x[i]);
end;
clrscr;
write('заданное число: ');
for i:=1 to n do
write(x[i]);
writeln;
writeln;
while (NextPermutation) do
begin
inc(kol);
write(kol,'-ое число: ');
for i:=1 to n do
write(x[i]);
writeln;
end;
writeln('Итого ',kol,' чисел больше заданного');
write('Нажмите любую клавишу для выхода...');
readkey;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Оля

Репутация: -  0  +


Что-то у меня не получается с этой программой. В числе должно быть не более 8 цифр, а программа согласно этой строке write('введите ',i,'-ую цифру числа: '); запрашивает 14 раз 'введите 1-ую цифру числа' и так до 14 раз (хотя, например, ввожу число из 3-х цифр).


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Вот так попробуй:
function Fact(n: integer): longint;
var
i: integer;
T: longint;
begin
T := 1;
for i := 1 to n do T := T * i;
Fact := T;
end;

function PermutationNum(const A : array of integer; N : Integer): longint;
var
T, i, j: integer;
F: longint;
theResult: longint;
begin
if N <= 0 then begin
PermutationNum := 0; Exit;
end;

I:=1;
while I <= N do begin

if (A[I]<1) or (A[I]>N) then begin
PermutationNum := 0; Exit;
end;
Inc(I);

end;

theResult := 0;
F := 1;
I := 1;
while I <= N do begin
F := F*I;
Inc(I);
end;

I := 1;
while I <= N-1 do begin
F := F div (N+1-I);
T := A[I]-1;
J := 1;
while J <= I-1 do begin
if A[J]<A[I] then begin
T := T-1;
end;
Inc(J);
end;
theResult := theResult + F*T;
Inc(I);
end;
theResult := theResult + 1;
PermutationNum := theResult;
end;

const
n: integer = 3;
var
arr: array[0 .. 8] of integer;
s: string;
i: integer;
p, total: longint;

begin
write('n = '); readln(n);
write('number[', n, ' chars] = '); readln(s);

arr[0] := 0;
for i := 1 to n do arr[i] := ord(s[i]) - ord('0');

p := PermutationNum(arr, n);
total := Fact(n);
writeln(total - p);
end.

(вводишь сначала n - не больше 8, потом в виде строки само число из n цифр...)

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской
Реальное имя: Юра

Репутация: -  1  +


Цитата(Ольга @ 7.05.2007 17:49) *

Что-то у меня не получается с этой программой. В числе должно быть не более 8 цифр, а программа согласно этой строке write('введите ',i,'-ую цифру числа: '); запрашивает 14 раз 'введите 1-ую цифру числа' и так до 14 раз (хотя, например, ввожу число из 3-х цифр).

значит просто ввела n равное не трём, а четырнадцати.

у меня вот как программа работает:

Введите n:3
введите 1-ую цифру числа: 1
введите 2-ую цифру числа: 2
введите 3-ую цифру числа: 3
заданное число: 123

1-ое число: 132
2-ое число: 213
3-ое число: 231
4-ое число: 312
5-ое число: 321
Итого 5 чисел больше заданного
Нажмите любую клавишу для выхода...


Сообщение отредактировано: samec -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Оля

Репутация: -  0  +


Большое спасибо, все правильно работает!!!
Оля
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 17:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name