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&"辆")
页: 1 [2] 3 4 5
查看完整版本: [追加新题]刚刚看到个数学题,新人来做做吧,呵呵