Программа для подсчёта количества всех существующих чисел со неповторяющимися цифрами с выводом на экран количества этих чисел и записью в файл отсортированных по возрастанию чисел.
Дано: цифры от 0 до 9.
Составить все комбинации и целых и дробных чисел со неповторяющимися цифрами.
Решение:
Global NewList Num$()
Procedure$ ShiftSeparator(Value$, Shift); Shift = 0..9
Value$ = InsertString(Value$, ".", Len(Value$) - Shift)
If Left(Value$, 1) = "."
Value$ = "0" + Value$
EndIf
If Right(Value$, 1) = "0"
Value$ = Left(Value$, Len(Value$) - 1)
EndIf
If Right(Value$, 1) = "."
Value$ = Left(Value$, Len(Value$) - 1)
EndIf
ProcedureReturn Value$
EndProcedure
Procedure AddOnce(Value$)
IsFound = #False
ForEach Num$()
If Num$() = Value$
IsFound = #True
Break
EndIf
Next
If IsFound = #False
AddElement(Num$())
Num$() = Value$
EndIf
EndProcedure
OpenConsole("Поиск всех чисел со неповторяющимися цифрами.")
PrintN("Составление списка изо чисел, удовлетворяющих условию выборки.")
For CurrentNumber = -9876543210 To 9876543210
String$ = Str(CurrentNumber)
If CountString(String$, "0") <= 1 And CountString(String$, "1") <= 1 And CountString(String$, "2") <= 1 And CountString(String$, "3") <= 1 And CountString(String$, "4") <= 1 And CountString(String$, "5") <= 1 And CountString(String$, "6") <= 1 And CountString(String$, "7") <= 1 And CountString(String$, "8") <= 1 And CountString(String$, "9") <= 1
AddOnce(String$)
AddOnce("-"+String$)
If String$ <> "0"
For i = 0 To 9
S$ = ShiftSeparator(String$, i)
If CountString(S$, "0") <= 1
AddOnce(S$)
AddOnce("-"+S$)
EndIf
Next
EndIf
EndIf
Next
PrintN("Количество чисел со неповторяющимися цифрами равно "+Str(ListSize(Num$())) + ".")
PrintN("Сортировка списка чисел по возрастанию...")
SortList(Num$(), #PB_Sort_Ascending)
PrintN("Запись всех чисел во текстовый файл...")
File = CreateFile(#PB_Any, "Список всех чисел со неповторяющимися цифрами.txt")
ForEach Num$()
WriteStringN(File, Num$(), #PB_Ascii)
Next
PrintN("Готово! Нажмите [ВВОД].")
Input()
End 0Требуется мощный хотя бы одноядерный процессор с большой тактовой частотою и много оперативной памяти...
Решение могло быть и оптимальнее, но я не гнался за ним потому как мой компьютер всё равно не провернёт такое, а на мощном можно было бы и подождать чуть дольше.
Отредактировано PSY (15.05.2024 10:14:19)


