中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已解决)生成随机数(78),显示结果是78=2+4+8+64
作者:
标题: (已解决)生成随机数(78),显示结果是78=2+4+8+64 上一主题 | 下一主题
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『楼 主』:  (已解决)生成随机数(78),显示结果是78=2+4+8+64

随机生成一个<=127的整数,用1,2,4,8,16,32,64几个数的和表示出来。

举两个例子:
如果随机数是1,那么我要的结果是1=1
如果随机数是78,那么我要的结果是78=2+4+8+64
最好是用VBS,当然BAT也感谢!(希望能给说一下思路,谢谢!)

[ Last edited by jmz573515 on 2006-12-31 at 02:41 PM ]

2006-12-31 23:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 2 楼』:  

兄需要的一部分思路下面的贴子可以参考~:)


九九乘法表
http://www.cn-dos.net/forum/viewthread.php?tid=26038&fpage=6


另:论坛中下面的贴子的起始思路也是来自namejm版主在写上面的《九九乘法表》代码中的感悟。

《[共同参与][挑战思路] 求一列数所有不同组合的和 》
http://www.cn-dos.net/forum/viewthread.php?tid=26180&fpage=1


另:随机数使用 %random% 生成。



) 关于如何生成某个指定范围的随机数,论坛中已有长达n页的精彩探讨与算法,可在论坛“搜索”功能中查找到(使用标题/正文这两种方式)。

) 关于如何生成n+x=……的算法,源于《九九乘法表》原理。

[ Last edited by redtek on 2006-12-31 at 10:48 AM ]



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-31 23:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 3 楼』:  

试试一下代码:
@echo off
setlocal enabledelayedexpansion
echo ================================
echo.
echo        计算一个数字的计算式
echo ================================
set /P EN=请输入一个数字:

set /a var=%EN%
for %%i in (64 32 16 8 4 2 1) do (
    if !var! GEQ %%i (
         set /a var=!var!-%%i
         set str=!str!%%i+))

echo %str:~0,-1%=%EN%

pause>nul
至于原理,类似于利用托盘天平加砝码的原则(由重到轻)

   此帖被 +4 点积分        点击查看详情   
评分人:【 jmz573515 分数: +4  时间:2007-1-1 03:40


2007-1-1 01:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 4 楼』:  

楼上的输入数字不能大于最大数的两倍^_^

2007-1-1 02:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Primalchaos
初级用户





积分 41
发帖 19
注册 2006-12-15
状态 离线
『第 5 楼』:  

确切的说是不能大于等于()中所有数的和
不过也很厉害了,楼主也说了<=127。
^_^

2007-1-1 02:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




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

好,加分!

2007-1-1 03:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
weapfe
初级用户




积分 144
发帖 66
注册 2006-11-30
状态 离线
『第 7 楼』:  

好像不行哦.大家请看:这是我的测试结果~~不知..
================================

       计算一个数字的计算式
================================
请输入一个数字:56
64+2+32+16+8=56
请按任意键继续. . .

2007-1-1 05:49
查看资料  发送邮件  发短消息 网志  OICQ (261372684)  编辑帖子  回复  引用回复
weapfe
初级用户




积分 144
发帖 66
注册 2006-11-30
状态 离线
『第 8 楼』:  

哦,是我改动原代码所致!
我改的代码为:
@echo off
setlocal enabledelayedexpansion

:12
cls
echo ================================
echo.
echo        计算一个数字的计算式
echo ================================
set /P EN=请输入一个数字:

set /a var=%EN%
for %%i in (64 32 16 8 4 2 1) do (
    if !var! GEQ %%i (
         set /a var=!var!-%%i
         set str=!str!%%i+))

echo %str:~0,-1%=%EN%

pause
goto 12
第一次我输入了68
第二次我输入了56
不知道原因,请达人解释一下~~

2007-1-1 05:52
查看资料  发送邮件  发短消息 网志  OICQ (261372684)  编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 9 楼』:  

我这里怎么是这样的呢?!
对了,没看到你的上面那句话!来了个goto,
解决办法,可以在set /p EN=...上面再加两句 set EN=
set str=
================================

       计算一个数字的计算式
================================
请输入一个数字:56
32+16+8=56
[ Last edited by youxi01 on 2007-1-1 at 05:59 AM ]

2007-1-1 05:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 10 楼』:  

又是一个计算题!!

2007-1-1 13:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: