Что нового

Генерация чисел, Массивы, Математика

Mur

Осваивающий
Сообщения
132
Репутация
32
Версия AutoIt: 3.3.8.1

Описание: Такая задача, имеем числа от 0 до 9
Нужно чтобы из них составлялось 6-тизначное число, далее это число делят на 2 "подчисла", - первые 3 символа и последние 3 символа, затем, эти символы складываются между собой (первые 3 между собой и последние 3 между собой), и сравниваются. Если значения равные, то они записываются, скажем, в txt, если нет, то продолжаем искать.
То есть, нужно просчитать таким способом все числа.

Примечания: ссылки на подобные чудеса, куски кода, всё что может помочь - оставляйте, пожалуйста.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Код:
Global $value,$while=0
Do
	For $i=0 To 5
		$value&=Random(0,9,1)
	Next
	Global $aValue[2]
	$aValue[1]=__Summ(StringSplit(StringTrimLeft($value,3),"",2))
	$aValue[0]=__Summ(StringSplit(StringTrimRight($value,3),"",2))
	If $aValue[0]=$aValue[1] Then
		FileWrite(@ScriptDir&"\1.txt",$value)
		$while=1
	EndIf
	$value=""
Until $while=1
Func __Summ($String)
	Local $ret
	For $i In $String
		$ret&=$i&"+"
	Next
	$ret=StringTrimRight($ret,1)
	Return Execute($ret)
EndFunc
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
Mur [?]
Нужно чтобы из них составлялось 6-тизначное число
IMHO немало времени займёт 10^6=1 миллион комбинаций (без учёта минуса и повторов).
 
Автор
Mur

Mur

Осваивающий
Сообщения
132
Репутация
32
MnM, спасибо, немного путаница получалась, так лучше:
Код:
FileWrite(@ScriptDir&"\1.txt", @CRLF & $value)

Только, вот, он должен делать это бесконечно много раз, а именно:
Garrett сказал(а):
IMHO немало времени займёт 10^6=1 миллион комбинаций (без учёта минуса и повторов).

Чтобы не было повторов, я пытался сделать кучу циклов, которые по очереди прибавляют к числу Х по единице, как только один цикл отсчитает десятку, это передаётся во второй и он начинает отсчёт десяток, как только единичный сделает N шагов, и от десяток идёт уже отсчёт сотен... В общем выглядело не ахти
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Mur
Подойдёт такой вариант?

Код:
$FILE=FileOpen('sum.txt',2)

 For $COUNTER=100000 To 999999
  $A=StringSplit($COUNTER,'')
  If $A[1]+$A[2]+$A[3]=$A[4]+$A[5]+$A[6] Then
   FileWriteLine($FILE,$COUNTER)
  EndIf
 Next

 FileClose($FILE)
 
Автор
Mur

Mur

Осваивающий
Сообщения
132
Репутация
32
snoitaleR,
всё хорошо, 1ин минус
число может быть вида 012012
чисел всё равно 6, 3 слева и 3 справа, сумма равная
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Mur
Второй вариант:

Код:
$FILE=FileOpen('sum.txt',2)

 For $COUNTER=1 To 999999
  $S=StringFormat('%06d',$COUNTER)
  $A=StringSplit($S,'')
  If $A[1]+$A[2]+$A[3]=$A[4]+$A[5]+$A[6] Then
   FileWriteLine($FILE,$S)
  EndIf
 Next

 FileClose($FILE)
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Мой вариант:
Код:
Global $aSum[1000]

For $i = 0 To 999
	$sTemp = StringFormat('%03d', $i)
	$aTemp = StringSplit($sTemp, '', 2)
	$aSum[$i] = $aTemp[0]+$aTemp[1]+$aTEmp[2]
Next

$hFile = FileOpen('sum.txt', 2)
For $i = 0 To 999
	$iTemp = $aSum[$i]
	For $k = 0 To 999
		If $iTemp = $aSum[$k] Then FileWriteLine($hFile, StringFormat('%03d%03d', $i, $k))
	Next
Next
FileClose($hFile)
 
Верх