![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
reill |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 52 Репутация: ![]() ![]() ![]() |
Задали преподователи задачку:
Придумать алгоритм записи девятизначного числа,в котором нет повторяющихся цифр и которое делится без остатка на 11.Число делится на 11,если разность между суммой цифр,стоящих на четных местах суммой -на нечетных делится на 11 или равна нулю. Определить минимальное и максимальное среди этих чисел. Минимальное: 102347586; S1=1+2+4+5+6=18; S2=0+3+7+8=18. Я тут пару часиков посидел вот катала начало: Код program cz; type mn=set of byte; masiv=array[1..9] of string; var cch: masiv; cn: masiv; c:longint; obr: string; i:byte; function mnog(var b: string): boolean; var f,z integer; begin val(b,f,z); for i:=0 to 9 begin if f=i then end; begin randomize; c:=trunc(random*1000000000); str(c,obr); for i:=1 to 9 do begin if odd(i) then begin cn[i]:=copy(obr,i,1); writeln('cn[',i,']:=',cn[i]); end else begin cch[i]:=copy(obr,i,1); writeln('cch[',i,']:=',cch[i]); end end; end. Но чего то мне этот алгоритм не нравится у кого есть другие идеи буду рад обсудить.... Сообщение отредактировано: volvo - 17.12.2004 11:43 |
![]() ![]() |
GLuk |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: ![]() ![]() ![]() |
Данная прога генерить все комбинации из набора "23456789", потом просто подставляется единица, описанная как FN. Чтобы получить действительно все комбинации для "123456789", единицу надо 9 раз поменять с другими цифрами. Думаю теперь уж доделаешь сам
![]() А комбинаций кстати всего - 362.880 для одного набора, а для девяти 3.265.920. Поначалу не так посчитал, через факториал надобно... Сразу оговорюсь - алгоритм опять таки страшный, но рабочий и считает в 327.987 раз быстрее, чем предыдущий... Код Uses Crt; Const S:array[1..9] of String = ('123456789','103456789','120456789', '123056789','123406789','123450789', '123456089','123456709','123456780'); Function Fact(N:LongInt):LongInt; var T:LongInt; i:LongInt; begin T:=1; For i:=1 to N do T:=T*i; Fact:=T; end; Const O:String = '6789'; L:String = '2345'; FN:Char = '1'; K:Char = #1; N=3; Var T,i,Sum1,Sum2:LongInt; j:Byte; F:Text; V:LongInt; Code:Integer; Procedure Form2; var i,j:Integer; Tm:String; begin Tm:=L; For j:=1 to N+1 do begin For i:=1 to 3 do begin Val(FN+L+O,V,Code); If V MOD 11 = 0 then WriteLn(F,V); K:=L[N+1]; L[N+1]:=L[N]; L[N]:=K; Val(FN+L+O,V,Code); If V MOD 11 = 0 then WriteLn(F,V); If Odd(i) then begin K:=L[N+1]; L[N+1]:=L[N]; L[N]:=K; end; K:=L[2]; L[2]:=L[N+1]; L[N+1]:=K; end; L:=Tm; K:=L[N-j+2]; L[N-j+2]:=L[1]; L[1]:=K; end; end; Procedure Form1; var i,j:Integer; Tm:String; begin Tm:=O; For j:=1 to N+1 do begin For i:=1 to 3 do begin Form2; K:=O[N+1]; O[N+1]:=O[N]; O[N]:=K; Form2; If Odd(i) then begin K:=O[N+1]; O[N+1]:=O[N]; O[N]:=K; end; K:=O[2]; O[2]:=O[N+1]; O[N+1]:=K; end; O:=Tm; K:=O[N-j+2]; O[N-j+2]:=O[1]; O[1]:=K; end; end; Begin ClrScr; Assign(F,'output.txt'); ReWrite(F); Form1; Close(F); End. Сообщение отредактировано: volvo - 17.12.2004 11:46 |
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 9:08 |