Что нового

[массивы] перебор комбинаций

F9

Новичок
Сообщения
71
Репутация
2
Добрый день!
Необходима помощь продвитутых программистов :scratch:

Исходные данные:
Есть двумерный массив во внешнем файле (допустим csv):
Код:
69,00;2,07;3,45
106,00;3,18;5,30
141,25;4,24;7,06
240,00;7,20;12,00
476,00;14,28;23,80
45,00;1,35;2,25
177,75;5,33;8,89
92,05;2,76;4,60
155,00;4,65;7,75
Первая колонка просто число, возможно дробное.
Вторая и третья - вычисленные 3% и 5% от этого числа.
Имеется некое искомое число, которое является в определенной комбинации суммой значений из колонки 2 и 3.
Причем из одной строки значения не могут суммироваться.

Не могу собрать в кучу мысли, как реализовать перебор.

Получаем массив из файла
Код:
#include <Array.au3>
$sText = FileRead(@ScriptDir & '\test.csv')
$aText = StringSplit(StringStripCR($sText), @LF)
StringReplace($aText[1], ';', '')
$i2D = @extended + 1
Dim $aRes[$aText[0]][$i2D]
For $i = 1 To $aText[0]
    $aTemp = StringSplit($aText[$i], ';')
    For $j = 1 To $aTemp[0]
        $aRes[$i - 1][$j - 1] = $aTemp[$j]
	Next
Next
_ArrayDisplay($aRes)

Далее необходим перебор примерно таким циклом:

шаг1
a[0][1] + a[1][1] + a[2][1] + a[3][1] и т.д
шаг2
a[0][1] + a[1][2] + a[2][1] + a[3][1] и т.д
шаг3
a[0][1] + a[1][1] + a[2][2] + a[3][1] и т.д
если сумма = искомому значению - выход. Указать индексы элементов массива, участвующие в сумме.
в сумме не могут участвовать значения по одной строке, например a[0][1] и a[0][2]
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
For $i1 = 0 To $aText[0]
	For $i2 = 0 To $aText[0]
		If $i2 = $i1 Then ContinueLoop
		For $i3 = 0 To $aText[0]
			If $i3 = $i1 Then ContinueLoop
			If $i3 = $i2 Then ContinueLoop
			For $i4 = 0 To $aText[0]
				If $i4 = $i1 Then ContinueLoop
				If $i4 = $i2 Then ContinueLoop
				If $i4 = $i3 Then ContinueLoop
				$sum = $a[$i1][0] + $a[$i2][1] + $a[$i2][2] + $a[$i3][3]
				If $sum = $iskomoe_znachenie Then MsgBox(0,"НАШЕЛ", $i1$&@CR&$i2$&@CR&$i3$&@CR&$i4)
			Next
		Next
	Next
Next
 
Автор
F9

F9

Новичок
Сообщения
71
Репутация
2
Что-то логика не та вроде бы...
Не понимаю, чего ищем... По идее должно быть бесконечное количество переборов, в зависимости от размера исходного массива.
с утра не могу воткнуться в код (( :stars: почему всего 4 элемента могут быть задействованы в поиске суммы ?

Если расписать логику, то мы ищем всевозможные сочетания элементов массива $aText[1] и $aText[2] которые в сумме дают искомое число.
 
Верх