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

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

 火... [复制链接]
发表于 2010-7-28 11:05:42 | 显示全部楼层
很好,学习下数学算法
发表于 2010-7-28 11:28:31 | 显示全部楼层
自己先慢慢琢磨下先
发表于 2010-7-28 21:25:15 | 显示全部楼层
我要瞧瞧……
发表于 2010-7-28 23:49:50 | 显示全部楼层
看起来不是很复杂
发表于 2010-7-29 14:13:56 | 显示全部楼层
我来学习一下,刚入门,多看一些...
发表于 2010-7-30 11:39:47 | 显示全部楼层
本帖最后由 psp7456 于 2010-7-30 12:27 编辑

第一题:穷举法
local $B;自行车数量
local $C;三轮车数量
for $B=1 to 65
        for $C=1 to 65
                if $B+$C=65 and 2*$B+3*$C=150 then
                        MsgBox(4096, "答案", "自行车有" & $B &"辆,三轮车有" & $C & "辆")
                        exit
                endif
        next
next
发表于 2010-7-30 12:23:08 | 显示全部楼层
本帖最后由 psp7456 于 2010-7-30 12:27 编辑

第二题:还是穷举法
local $M,$W,$C;M男人,W女人,C小孩

        for $M=1 to 36
                for $W= 1 to 36
                        for $C=2 to 36 step 2
                                if(4*$M+3*$W+0.5*$C=36) then
                                MsgBox(4096, "答案", "男人有" & $M &"个,女人有" & $W & "个,小孩有"& $C & "个")
                                endif
                        next
                next
        next
发表于 2010-7-30 12:34:23 | 显示全部楼层
第三题:实在是没有必要编程解决吧?
local $X;X人数
        for $X=1 to 100
                        if 5*$X+45=7*$X+3 then
                                MsgBox(4096, "答案", "人有" & $X &"个,羊价值" & 7*$X+3 & "元")
                        endif
        next
发表于 2010-7-30 12:38:06 | 显示全部楼层
算法很好,学习一下
发表于 2010-7-30 13:30:51 | 显示全部楼层
第四题:迭代函数

思路如下
采取对称走取石头的方法,如三块石头的话ABC,从C开始走到B,然后从B走到A,再从A回到B完成。如5块石头的话ABCDE,从E开始走到C,然后从C开始走到A,再从A回到C,此时ABCDE已经变成BCD的样式,再从C走到D就完全变成了ABC的状态即回到了3块石头的问题。由这种思路建立迭代算法


F(1)=0
F(3)=F(1)+3*(3-1)/2+1*(1-1)/2
3块石头就是在1块石头的基础上增加了2块,还要多走3*(3-1)/2的距离才能变回1块石头的状态
F(5)=F(3)+3*(5-1)/2+1*(3-1)/2
5块石头就是在3块石头的基础上增加了2块,还要多走3*(7-1)/2的距离才能变回3块石头的状态,此时恰好位于中间部位,还要再走1*(5-1)/2才能回到最右侧,变成3块石头的状态。
F(7)=F(5)+3*(7-1)/2+1*(5-1)/2


F(X)=F(X-2)+3(X-1)/2+1*(X-2-1)/2 X是奇数
local $X
func psp($num)
        if $num=1 then 
                return 0
        else
                return psp($num-2)+3*($num-1)/2+($num-2-1)/2
        endif
endfunc

for $X=1 to 101 step 2
        if psp($X)=300 then
                MsgBox(4096, "答案", "有"&$X&"块石头")
        endif
next
发表于 2010-7-30 14:41:31 | 显示全部楼层
百鸡那个题有没有正解,不要列出可能的数据,直接要准确的
发表于 2010-7-30 15:03:39 | 显示全部楼层
For $i= 0 To 100
        For        $x=0 To 100
                $y=100-$i-$x
        If $i*5+$y*3+$x/3=100 And $i>0 And $x>0 And $y>0 Then
                MsgBox(0,"鸡鸡鸡","一共有"&$i&"公鸡,"&$y&"母鸡,"&$x&"小鸡")
                ExitLoop
                        EndIf
                Next                
Next
小弟用楼主的方法改造了一下百鸡算法
发表于 2010-7-30 15:45:16 | 显示全部楼层
买羊了
For $x=0 To $x*5+45
        If $x*5+45=$x*7+3 Then
                MsgBox(0,"人买羊",""&$x&"个人花了"&$x*5+45&"买羊")
                ExitLoop
        EndIf
Next
发表于 2010-7-30 16:15:47 | 显示全部楼层
本帖最后由 3mile 于 2010-7-30 16:19 编辑

石头问题,来个枚举1000米以内的可能。
Local $temp,$fin
For $n=1 To 1000
        $temp=Enumerate($n)
        If Not @error Then
                $fin&=$temp&"块石头"&"需要走"&$n&"米"&@CRLF
        EndIf
Next

$input=InputBox("",$fin,"300","",200,400)
$Res=Enumerate($input)
If @error=1 Then 
        MsgBox(0,"","输入数据无解"&@CRLF&"输入框上有1000米以内枚举结果")
Else
        MsgBox(0,0,"共有石头:"&Enumerate($input))
EndIf

Func Enumerate($m)
        Dim $i = 1, $a, $y,$Result
While 1;计算一半石头数
        $a += $i * 2;累加计算一半石头总里程数
        $y = 2 * $a - $i;因为从右边开始取石头,则两边总里程数-最右边到中间的里程数
        If $y = $m Then;判断结果
                ExitLoop
        ElseIf $y > $m Then ;数据溢出
                $i = $m + 1;定义出错标志
                ExitLoop
        EndIf
        $i+= 1
WEnd;循环结束
If $i <> $m + 1 Then
        $Result = 2 * $i + 1
        Return $Result
Else
        Return SetError(1,0,"")
EndIf
EndFunc
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-21 20:51 , Processed in 0.071215 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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