找回密码
 加入
搜索
楼主: jhun

[AU3基础] [追加新题]刚刚看到个数学题,新人来做做吧,呵呵

 火... [复制链接]
发表于 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
发表于 2010-7-23 14:06:50 | 显示全部楼层
15楼,上面这位仁兄错误了吧
发表于 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);
发表于 2010-7-23 14:09:07 | 显示全部楼层
这样子就能返回数组 不然只有1个 1行 2列 返回
发表于 2010-7-23 14:10:04 | 显示全部楼层
因为条件语句已经限定死 我不过我还是喜欢这样子的写法
发表于 2010-7-23 14:10:38 | 显示全部楼层
简单实用 我又来骗钱了 赫赫
发表于 2010-7-23 14:38:55 | 显示全部楼层
3mile 果然思维缜密,这个题目限定的很死 其他只要2楼的思路解题就可以了
发表于 2010-7-23 15:17:08 | 显示全部楼层
我数学烂·以前上初中时,感觉应用题都觉得超级伤脑筋
发表于 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
我有点笨。。只能这样算了
发表于 2010-7-23 16:26:02 | 显示全部楼层
用2重循环会存在效率问题。
单凭一句表达式能完成此题吗?当然要先经过逻辑思考一番。
发表于 2010-7-23 18:38:38 | 显示全部楼层
楼主的算法应该很高效了。
还请P大指教。
发表于 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来解答此题,那当然是不行的。我只是在思考这样一个问题。
发表于 2010-7-23 19:22:18 | 显示全部楼层
做不来哦!
发表于 2010-7-23 19:23:44 | 显示全部楼层
回复 27# pusofalse
哦,这个问题我也想了很久。
而且思路基本相同。
但就是无法用程序来实现。
不过还是要多谢P大提醒,才会想得这么多。--对那个批处理非常的神往啊!
发表于 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&"辆")

评分

参与人数 2金钱 +50 贡献 +5 收起 理由
anchie + 10 + 5 这个很好
pusofalse + 40 高,学习了。

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 13:58 , Processed in 0.078525 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表