nbmpe
发表于 2010-12-15 20:45:24
今天才看, 只会一种笨方法!
Dim $a , $b, $c , $DATA, $TEMP = ""
For $a = 0 To 100/5
For $b = 0 To Ceiling (100/3)
For $c = 0 To 100*3
If $a*5 + $b*3 + $c/3 = 100 And $A + $B + $C = 100 Then
$DATA = $A & " |" & $B &"|" & $C & @CRLF
$TEMP &= $DATA
EndIf
;MsgBox(0,"OK", "公鸡:" & $a & @CRLF & "母鸡:" & $b & @CRLF & "小鸡:" & $c)
Next
Next
Next
MsgBox(0,0,"公鸡 母鸡 小鸡 " & @CRLF & $TEMP)
yslqa
发表于 2010-12-15 20:49:35
{:face (303):}学习了,
bob
发表于 2010-12-15 20:54:34
枚举法,看时间效率和复杂度
bob
发表于 2010-12-15 21:02:32
本帖最后由 bob 于 2010-12-15 21:05 编辑
For $x=0 To 20
For $y=0 To 33
$z=100-$x-$y
If 5*$x+3*$y+$z/3=100 And mod($z, 3) = 0 Then
MsgBox(0,"",$x & " " & $y & " " & $z)
EndIf
Next
Next
jianganew
发表于 2010-12-16 15:51:30
学习学习,很好
lxz
发表于 2010-12-16 15:55:42
学 习 了 ....
_ddqs.
发表于 2010-12-17 21:31:35
;11楼的都看到了,经典!按部就班改下(回头再看看,竟与31楼写到一块去)
$count = 0
For $i = 0 To 100 / 5 ;公鸡只 5文 ,100文 最多可以买 ( 100 /5 )
For $j = 0 To 100 / 3 ;母鸡只 3文 ,100文 最多可以买 ( 100 /3 )
For $k = 0 To 100 * 3 ;鸡仔只 3文 ,100文 最多可以买 ( 100 *3 )
If $i + $j + $k = 100 And $i * 5 + $j * 3 + $k / 3 = 100 Then ;当买 100只 并 总价 为 100文 时
$count += 1
ConsoleWrite( @LF & @LF & _
"购物清单: " & $count & @LF & _
"公鸡: " & $i & " 只,价值:" & $i * 5 & " 文" & @LF & _
"母鸡: " & $j & " 只,价值:" & $j * 3 & " 文" & @LF & _
"鸡仔: " & $k & " 只,价值:" & $k / 3 & " 文" & @LF & _
"总只数: " & $i + $j + $k & " 总价值:" & $i * 5 + $j * 3 + $k / 3 & " 文" & @LF & _
"以上数据,仅供参考!"& @LF& @LF _
)
EndIf
Next
Next
Next
ConsoleWrite(@LF&@LF& "你将要采购的有 " & $count & " 种形式的配置!" &@LF&@LF)
_ddqs.
发表于 2010-12-17 23:47:48
;Local $sy,$sy2
For $i = 1 To 100 ;以耗钱计算,什么都要买(鸡仔先算)
$sy = 100 - $i
For $j = 1 To $sy / 3
$sy2 = $sy - $j * 3
If Mod($sy2, 5) <> 0 Then ContinueLoop
If$sy2/5 + $j + $i*3 = 100 And $sy2/5<>0 Then ;计算是否为 100 只(并排除公鸡只数=0)
ConsoleWrite(@LF & "公鸡" & $sy2/5 & "母鸡" & $j & "鸡仔" & $i * 3 & @LF)
EndIf
Next
Next
_ddqs.
发表于 2010-12-18 04:11:51
本帖最后由 _ddqs. 于 2010-12-18 14:13 编辑
;以耗钱计算,什么都要买(鸡仔先算)
;不付值变量进行交互,直接使用的后果……会连自己看了也会晕~~~
;并且做了重复运算,效率也差
;
;拿了 100 文去上街
For $i = 1 To 100 ;先买鸡仔
If $i * 3 > 100 Then ExitLoop ;都限定 100 只鸡了,纵然全买小鸡也用不了 34 文
For $j = 1 To (100 - $i) / 3 ;再买母鸡
;最后买公鸡
If ((100 - $i) - $j * 3) / 5 + $j + $i * 3 = 100 And _ ;总数是不是 100 只
Mod((100 - $i) - $j * 3, 5) = 0 And _ ;余钱是不是可以全部买公鸡
((100 - $i) - $j * 3) / 5 <> 0 _ ;排除公鸡数量为 0只
Then ;筛选数据,以上条件匹配时输出
ConsoleWrite(@LF & "公鸡" & ((100 - $i) - $j * 3) / 5 & "母鸡" & $j & "鸡仔" & $i * 3 & @LF)
EndIf
Next
Next
;以耗钱计算,什么都要买(鸡仔先算)
;不付值变量进行交互,直接使用的后果……会连自己看了也会晕~~~
;并且做了重复运算,效率也差
;买鸡顺序:小鸡——公鸡——母鸡,比,小鸡——母鸡——公鸡,循环次数较少!
;
;拿了 100 文去上街
For $i = 1 To 100 ;先买鸡仔($i文)
If $i * 3 > 100 Then ExitLoop ;都限定 100 只鸡了,纵然全买小鸡也用不了 34 文
For $j = 1 To (100 - $i) / 5 ;再买公鸡($j只)
;最后买母鸡(余钱)
If ((100 - $i) - $j * 5) / 3 + $j + $i * 3 = 100 And _ ;总数是不是 100 只
Mod((100 - $i) - $j * 5, 3) = 0 And _ ;余钱是不是可以全部买母鸡
((100 - $i) - $j * 5) / 3 <> 0 _ ;排除母鸡数量为 0只
Then ;筛选数据,以上条件匹配时输出
ConsoleWrite(@LF & "公鸡" & $j & "母鸡" & ((100 - $i) - $j * 5) / 3 & "鸡仔" & $i * 3 & @LF)
EndIf
Next
Next
冷月無聲
发表于 2010-12-18 10:33:48
來學習一下。。
_ddqs.
发表于 2010-12-18 14:52:33
本帖最后由 _ddqs. 于 2010-12-18 16:32 编辑
;多少钱可以买100只鸡
For $x = 1 To 100
$ret = _buy($x)
If $ret <> "" Then
ConsoleWrite(@LF & @LF & "花了" & $x & "文可以买100只鸡" & @LF & "--------------------------" & @LF)
ConsoleWrite($ret)
ConsoleWrite("--------------------------" & @LF & @LF & @LF)
EndIf
Next
Func _buy($money)
Local $ret = ""
For $i = 1 To $money / 3
For $j = 1 To ($money - $i) / 5
If (($money - $i) - $j * 5) / 3 + $j + $i * 3 = 100 And _
Mod(($money - $i) - $j * 5, 3) = 0 And _
(($money - $i) - $j * 5) / 3 <> 0 _
Then
$ret &= @LF & "公鸡" & $j & "母鸡" & (($money - $i) - $j * 5) / 3 & "鸡仔" & $i * 3 & @LF
$ret &= "公鸡" & $j*5 &" 文 "& "母鸡" & ((($money - $i) - $j * 5) / 3)*3 &" 文 "& "鸡仔" & $i * 3 / 3 &" 文 "& @LF
$ret &= "共" & ($j*5) + (((($money - $i) - $j * 5) / 3)*3) + ($i * 3 / 3) &" 文 "& @LF
EndIf
Next
Next
Return $ret
EndFunc ;==>_buy
;多少钱可以买100只鸡
For $x = 1 To 100
$ret = _buy($x)
If $ret <> "" Then
ConsoleWrite(@LF & @LF & "花了" & $x & "文可以买100只鸡" & @LF & "--------------------------" & @LF)
ConsoleWrite($ret)
ConsoleWrite("--------------------------" & @LF & @LF & @LF)
EndIf
Next
Func _buy($money)
Local $ret = ""
For $i = 1 To $money / 3 ;女士优先(虽然与BB的循环次数一样,但可最大限度的降低内循环的值,使循环次数更少,并取得的数据会更多)
For $j = 1 To ($money - $i * 3) / 5 ;男士追上
;最后才有BB
If (($money - $i * 3) - ($j * 5)) <> 0 And $j + $i + (($money - ($i * 3) - ($j * 5)) * 3) = 100 Then ;计算余额非 0 并 总只数为 100.
$ret &= @LF & "公鸡" & $j & "只,母鸡" & $i & "只,鸡仔" & (($money - $i * 3) - ($j * 5)) * 3 &"只"& @LF
$ret &= "公鸡" & $j * 5 & "文," & "母鸡" & $i * 3 & "文," & "鸡仔" & (($money - $i * 3) - ($j * 5)) & "文" & @LF
$ret &= "共" & ($j * 5) + ($i * 3) + (($money - $i * 3) - ($j * 5)) & "文("& $j + $i + (($money - ($i * 3) - ($j * 5)) * 3) &"只)"& @LF
EndIf
Next
Next
Return $ret
EndFunc ;==>_buy
_ddqs.
发表于 2010-12-18 15:00:26
本帖最后由 _ddqs. 于 2010-12-18 16:38 编辑
原来上街也有钱赚
--------------------------
公鸡1只,母鸡3只,鸡仔96只
公鸡5文,母鸡9文,鸡仔32文
共46文(100只)
--------------------------
花了46文可以买100只鸡
...
每条多2文
...
--------------------------
花了84文可以买100只鸡
--------------------------
花了86文可以买100只鸡
--------------------------
花了88文可以买100只鸡
--------------------------
花了90文可以买100只鸡
--------------------------
花了92文可以买100只鸡
--------------------------
花了94文可以买100只鸡
--------------------------
花了96文可以买100只鸡
--------------------------
花了98文可以买100只鸡
--------------------------
花了100文可以买100只鸡
--------------------------
mingq258
发表于 2010-12-19 01:46:14
look a look