3mile
发表于 2010-7-23 13:39:34
本帖最后由 3mile 于 2010-7-23 14:04 编辑
好吧,改进一下Local $x, $y, $j, $Result
Dim $input = InputBox("", "车棚有车65辆,输入车轮总数")
$divisor = Common_divisor(2, 3)
If $input >= 130 And $input<=205 Then
If Mod($input, $divisor) <> 0 Then
MsgBox(4096, "警告", "车轮数不符" & @CRLF & "请检查数据")
Else
If IsInt(Execute($input)) Then
For $x = 0 To $input / 2
For $y = 0 To $input / 3
$j = $x *2+ $y*3
If $j = $input And $x+$y=65 Then
$Result &= "自行车有:" & $x & "辆" & @TAB & "三轮车有:" & $y & "辆" & @CRLF
EndIf
Next
Next
MsgBox(0, 0, $Result)
Else
MsgBox(4096, "警告", "车轮残缺不全" & @CRLF & "不予计算")
EndIf
EndIf
Else
MsgBox(4096, "警告", "车棚内无独轮车"&@CRLF&"无三轮以上的车" & @CRLF & "不予计算")
EndIf
Func Common_divisor($num1, $num2);计算公倍数
Dim $a = $num1, $b = $num2
While 1
$temp = Mod($a, $b)
$a = $b
$b = $temp
If $b = 0 Then ExitLoop
WEnd
;此时$a是公约数
Return $num1 * $num2 / $a;返回公倍数
EndFunc ;==>Common_divisor
fightsky
发表于 2010-7-23 14:06:50
15楼,上面这位仁兄错误了吧
fightsky
发表于 2010-7-23 14:08:23
Dim $a1="",$a2,$a3;
For $a2=0 To 65
For $a3=0 To 50
If$a2*2+$a3*3=150 Then
$a1&="有"&$a2&"两轮车,"&$a3&"辆三轮车"&@CRLF
EndIf
Next
Next
MsgBox(0,"有下列几种可能",$a1);
fightsky
发表于 2010-7-23 14:09:07
这样子就能返回数组 不然只有1个 1行 2列 返回
fightsky
发表于 2010-7-23 14:10:04
因为条件语句已经限定死 我不过我还是喜欢这样子的写法
fightsky
发表于 2010-7-23 14:10:38
简单实用 我又来骗钱了 赫赫
fightsky
发表于 2010-7-23 14:38:55
3mile 果然思维缜密,这个题目限定的很死 其他只要2楼的思路解题就可以了
t87564833
发表于 2010-7-23 15:17:08
我数学烂·以前上初中时,感觉应用题都觉得超级伤脑筋
nmgwddj
发表于 2010-7-23 16:23:22
Dim $i = 65, $x
While 1
$x += 1
$y = $i - $x
If $x * 3 + $y * 2 = 150 Then
MsgBox(0, '', $x & '.' & $y)
ExitLoop
EndIf
WEnd我有点笨。。只能这样算了
pusofalse
发表于 2010-7-23 16:26:02
用2重循环会存在效率问题。
单凭一句表达式能完成此题吗?当然要先经过逻辑思考一番。
3mile
发表于 2010-7-23 18:38:38
楼主的算法应该很高效了。
还请P大指教。
pusofalse
发表于 2010-7-23 19:06:11
回复 26# 3mile
抱歉,我不知道如何用一条语句来完成。
以前在学习批处理的时候,遇到过一个很类似的问题,同是一元方程,其中最精彩的解只用了一句set /a,if判断和for循环都省略了,当然是事先经过人脑思考的。那道题目具体的内容已经忘记了,最精彩的解也只记住只用了一句set /a,但可以肯定的是,思路同2#jhun兄。
设自行车的数量为x:
2x+3(65-x)=150
2x-3x=150-195
1x=45
最终会验算到1x=45,如果仅用一条语句 $x=45/1来解答此题,那当然是不行的。我只是在思考这样一个问题。
gto250
发表于 2010-7-23 19:22:18
做不来哦!
3mile
发表于 2010-7-23 19:23:44
回复 27# pusofalse
哦,这个问题我也想了很久。
而且思路基本相同。
但就是无法用程序来实现。
不过还是要多谢P大提醒,才会想得这么多。--对那个批处理非常的神往啊!
3mile
发表于 2010-7-23 19:41:47
不知道这样行不行;3x+2(65-x)=150
;3x+130-2x=150
;x=150-130
;65-x=45
;即三轮车数=车轮数-车辆数*2
Dim $x=InputBox("","输入车轮数")
Dim $y=InputBox("","输入车辆数")
$z=$x-2*$y
If IsInt($z) Then MsgBox(0,"结果","三轮车共有:"&$z&"辆"&@CRLF&"自行车共有:"&$y-$z&"辆")