中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]100个馒头分在6个盘子里 ... (vbs)
作者:
标题: [已解决]100个馒头分在6个盘子里 ... (vbs) 上一主题 | 下一主题
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『楼 主』:  [已解决]100个馒头分在6个盘子里 ... (vbs)

100个馒头分在6个盘子里,每个盘子分的馒头个数都不离6(如16,6,62等),馒头的数可以重复.

[ Last edited by jmz573515 on 2007-5-9 at 05:41 PM ]

2007-5-9 08:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 2 楼』:  

6 6 6 6 16 60

随便给了一个:)vbs我不会:)帮不了你。

@echo off & SetLocal EnableDelayedExpansion

rem 提取计算的数字:

set "count=0"
    for /l %%i in (0,1,100) do echo %%i | find "6" && set "count+=1" & set "num!count!=%%i"

然后,换个算法而已。。(循环查找了。满足条件的就打印出来)



知,不觉多。不知,乃求知
2007-5-9 12:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 3 楼』:  

到excelhome求了段vba代码来,不过不知如何改成vbs的,呵呵。

  Quote:

  1. Sub cc2()
  2.     Dim s As New Collection, i As Long
  3.     For i = 1 To 100
  4.         If i Like "*6*" Then s.Add i, CStr(i)
  5.     Next
  6.     For a = 1 To s.Count
  7.         For b = a To s.Count
  8.             For c = b To s.Count
  9.                 For d = c To s.Count
  10.                     For e = d To s.Count
  11.                         For f = e To s.Count
  12.                             If s(a) + s(b) + s(c) + s(d) + s(e) + s(f) = 100 Then Debug.Print s(a) & "+" & s(b) & "+" & s(c) & "+" & s(d) & "+" & s(e) & "+" & s(f) & " = 100"
  13.                         Next
  14.                     Next
  15.                 Next
  16.             Next
  17.         Next
  18.     Next
  19. End Sub
        ccwan发表于:  2007-05-09  13:09



   此帖被 +8 点积分        点击查看详情   
评分人:【 jmz573515 分数: +8  时间:2007-5-9 17:41




三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-5-9 13:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 4 楼』:  

For a = 1 To s.Count

        For b = a To s.Count

            For c = b To s.Count

                For d = c To s.Count

                    For e = d To s.Count

                        For f = e To s.Count
这个用的妙!谢谢,问题解决了。

2007-5-9 17:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 5 楼』:  

jmz573515兄何不贴出代码,大家共享。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-5-9 17:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 6 楼』:  

’不知道有没有更好的方法
For i = 1 To 100-6*5
    If instr(i,"6")<>0 then j=j & i & ";"
Next
j=left(j,len(j)-1):s=split(j,";"):m=ubound(s)
for a=0 to m
  for b=a to m
    for c=b to m
      for d=c to m
        for e=d to m
          for f=e to m
             s(a)=cint(s(a)):s(b)=cint(s(b)):s(c)=cint(s(c)):s(d)=cint(s(d)):s(e)=cint(s(e)):s(f)=cint(s(f))
             If s(a) + s(b) + s(c) + s(d) + s(e) + s(f) = 100 Then sn=sn & s(a) & "+" & s(b) & "+" & s(c) & "+" & s(d) & "+" & s(e) & "+" & s(f) & " = 100" & vbcrlf
          next
        next
      next
    next
  next
next
msgbox sn


2007-5-9 18:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 7 楼』:  

方法可能还有吧,不过谈不上什么更好的方法,只是思路不同罢了。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-5-9 18:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 8 楼』:  给个批处理版的。。不过速度超级慢。。。。

@echo off & SetLocal EnableDelayedExpansion

rem 提取计算的数字:

set "count=0"
        echo 正在提取数据……
        for /l %%i in (0,1,100) do (
                echo %%i | find "6" >nul && call :GetNum "%%i"
                )
        echo 正在打印数据……
        for /f "delims== tokens=2 " %%a in ('set ShowNum') do (
                set "a=%%a"
                for /f "delims== tokens=2 " %%b in ('set ShowNum') do (
                        set "b=%%b"
                        for /f "delims== tokens=2 " %%c in ('set ShowNum') do (
                                set "c=%%c"
                                for /f "delims== tokens=2 " %%d in ('set ShowNum') do (
                                        set "d=%%d"
                                        for /f "delims== tokens=2 " %%e in ('set ShowNum') do (
                                                set "e=%%e"
                                                for /f "delims== tokens=2 " %%f in ('set ShowNum') do (
                                                        set "f=%%f"
                                                        set /a "s=!a!+!b!+!c!+!d!+!e!+!f!"
                                                        if "!s!"=="100" call :PrintNum "!a!" "!b!" "!c!" "!d!" "!e!" "!f!" "!s!"
                                                        )
                                                )
                                        )
                                )
                        )
                )
       
GOTO END

:GetNum _num_
        set /a "count+=1"
        set ShowNum%count%=%~1
        goto :EOF
:PrintNum
        echo %~1+%~2+%~3+%~4+%~5+%~6=%~7
        goto :EOF
:END
pause

   此帖被 +2 点积分    点击查看详情   
评分人:【 stornager 分数: +2  时间:2007-5-11 20:10




知,不觉多。不知,乃求知
2007-5-9 18:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zouzhxi
中级用户

蝴蝶之吻


积分 430
发帖 177
注册 2006-9-20
来自 广东深圳
状态 离线
『第 9 楼』:  

我试了一那个P...

  Quote:
6+6+6+6+16+60=100        第1个 - 开始 19:58:32.85
6+6+6+6+60+16=100        第2个 - 用时 19:58:33.10
6+6+6+16+6+60=100        第3个 - 用时 19:58:42.51
6+6+6+16+60+6=100        第4个 - 用时 19:58:43.26
6+6+6+60+6+16=100        第5个 - 用时 19:58:47.12
6+6+6+60+16+6=100        第6个 - 用时 19:58:47.64
6+6+16+6+6+60=100        第7个 - 用时 20:01:46.35
6+6+16+6+60+6=100        第8个 - 用时 20:01:47.09
6+6+16+60+6+6=100        第9个 - 用时 20:02:01.06
6+6+60+6+6+16=100        第10个 - 用时 20:03:13.75
6+6+60+6+16+6=100        第11个 - 用时 20:03:14.26
6+6+60+16+6+6=100        第12个 - 用时 20:03:23.89
……………………





Butterfly Kiss Blog
计算机DIY联盟论坛
2007-5-10 20:06
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (234693993)  编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 10 楼』:  

set q=c(6)
for each n1 in q
    for each n2 in q
        for each n3 in q
            for each n4 in q
                for each n5 in q
                    for each n6 in q
                        if q(n1)+q(n2)+q(n3)+q(n4)+q(n5)+q(n6)=100 then
                           y=y&chr(10)&q(n1)&"+"&q(n2)&"+"&q(n3)&"+"&q(n4)&"+"&q(n5)&"+"&q(n6)

                        end if


                    next
                next
            next
        next
    next
next

msgbox(y)





function c(x)
set d=createobject("scripting.dictionary")
i=1
for a=0 to 9
    for b=0 to 9
        if a-x=0 or b-x=0 then
           f=int(a&b)
           d.add i,f
           i=i+1
        end if
    next
next
set c=d
end function

不知道为啥,这个代码结构上似乎没错,但是消耗了大半的CPU资源最后仍然没反映。。

[ Last edited by zhoushijay on 2007-5-12 at 01:34 PM ]

2007-5-11 16:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 11 楼』:  

Function c(x)
    Set d = CreateObject("Scripting.Dictionary")
    i = 1
    For a = 0 To 9
        For b = 0 To 9
            If a - x = 0 or b - x = 0 Then
                f = Int(a & b)
                d.add i,f
                i = i + 1
            End If
        Next
    Next
    Set c = d
End Function

这个过程只是浪费资源……

Function c(x)
    Set d = CreateObject("Scripting.Dictionary")
    i = 1
    For a = 1 To x - 1
        i = i + 1
        f = CInt(a & x)
        d.add i,f
    Next

    For a = 0 To 9
        i = i + 1
        f = CInt(x & a)
        d.add i,f
    Next
    For a = x - 1 To 9
        i = i + 1
        f = CInt(a & x)
        d.add i,f
    Next

    Set c = d
End Function

2007-5-11 19:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zouzhxi
中级用户

蝴蝶之吻


积分 430
发帖 177
注册 2006-9-20
来自 广东深圳
状态 离线
『第 12 楼』:  

不会呀...CPU资源只有15%到25%左右...不会很耗资源呀....只是用的时间较久而已......



Butterfly Kiss Blog
计算机DIY联盟论坛
2007-5-11 20:59
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (234693993)  编辑帖子  回复  引用回复
digger
初级用户

游荡的孤魂



积分 79
发帖 29
注册 2007-4-2
来自 湖南
状态 离线
『第 13 楼』:  

修改自8F的代码:
@echo off
setlocal enabledelayedexpansion

echo                       正在处理数据...
echo.
echo        此过程超级慢,CPU占用将高达100%%,请吃顿饭再回来^^_^^
echo.

set begin=%time%

:: 提取数字
for /l %%i in (1,1,5) do set str=!str! %%i6
for /l %%i in (0,1,9) do set str=!str! 6%%i
set str=6 %str%

for %%i in (%str%) do (
    for %%j in (%str%) do (
        for %%k in (%str%) do (
            for %%l in (%str%) do (
                for %%m in (%str%) do (
                    for %%n in (%str%) do (
                        set expression=%%i+%%j+%%k+%%l+%%m+%%n
                        set /a sum=!expression!
                        if !sum! equ 100 set /a num+=1&echo 第!num!条记录:!expression!=100  时间:!time!
                    )
                )
            )
        )
    )
)
echo.
echo                  终于完了,快看看花费的时间吧,破记录了吗?^^_^^
echo.
echo     开始时间:%begin%
echo     结束时间:%time%
pause


2007-5-11 22:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sunjiang0
新手上路





积分 6
发帖 4
注册 2007-5-12
状态 离线
『第 14 楼』:  

都是好东西啊

2007-5-12 05:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: