中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-11 07:08
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]从随机数字串中找出有多少对一样的数子。
可打印版本  1,812 / 18
第1楼 clian76 发表于 2009-01-08 00:20
中级用户 发帖 162 积分 363
[已结]从随机数字串中找出有多少对一样的数子。
给出一串随机数字,要求找出里面有几对一样的数字。比如:
14204 有1对(两个4)
08448 有2对(4和8)
93997 有1对
10257 有0对
998 有1对
208 有0对
4293 有0对
。。。。。。

最好是不产生临时文件。谢谢!!!

问题已完美解决,非常感谢各位高手!!!

[ Last edited by clian76 on 2009-1-10 at 02:44 ]
第2楼 dikex 发表于 2009-01-08 01:14
高级用户 发帖 366 积分 788
如果有三个或以上怎么办?
如:
1110
11110
第3楼 netbenton 发表于 2009-01-08 02:35
银牌会员 发帖 752 积分 1,916 来自 广西
@echo off
for /f "skip=15" %%i in (%~n0%~x0) do (
setlocal enabledelayedexpansion
set ru=0
set v=%%i
for /l %%i in (1,1,20) do (if defined v (call set "a=!v:~0,1!"&call set "v=!v:~1!"&set /a num!a!+=1))
for /l %%i in (0,1,9) do (set /a ru=num%%i/2+ru)
echo %%i 有 [!ru!] 对数
endlocal
)
pause

goto :eof
给出一串随机数字,要求找出里面有几对一样的数字。比如:



14204 有1对(两个4)
08448 有2对(4和8)
93997 有1对
10257 有0对
998 有1对
208 有0对
4293 有0对
第4楼 clian76 发表于 2009-01-08 13:01
中级用户 发帖 162 积分 363
Originally posted by dikex at 2009-1-8 01:14 AM:
如果有三个或以上怎么办?
如:
1110
11110

1110 1对
11110 2对
不知道批处理能不能做到这样,如果没办法就让它把全部可能的对子对比出来也行。谢谢!
第5楼 clian76 发表于 2009-01-08 13:08
中级用户 发帖 162 积分 363
Originally posted by netbenton at 2009-1-8 02:35 AM:
@echo off
for /f "skip=15" %%i in (%~n0%~x0) do (
setlocal enabledelayedexpansion
set ru=0
set v=%%i
for /l %%i in (1,1,20) do (if defined v (call set "a=!v:~0,1!"&call ...

谢谢netbenton老师的解答!几句高深的代码已完美做到,非常感谢!!
第6楼 netbenton 发表于 2009-01-08 14:37
银牌会员 发帖 752 积分 1,916 来自 广西
三人行必有我师焉!
共学共勉吧
第7楼 linee 发表于 2009-01-08 14:39
初级用户 发帖 49 积分 94
第8楼 clian76 发表于 2009-01-08 16:56
中级用户 发帖 162 积分 363
Originally posted by linee at 2009-1-8 02:39 PM:
第9楼 clian76 发表于 2009-01-08 17:22
中级用户 发帖 162 积分 363
Originally posted by linee at 2009-1-8 02:39 PM:
第10楼 linee 发表于 2009-01-08 18:33
初级用户 发帖 49 积分 94
Originally posted by clian76 at 2009-1-8 17:22:

不知道这里能不能去掉标签:loop,把它变成FOR方式,或其它方法,可行吗?

这里感觉还是用if goto简单点,用for不好实现吧。
第11楼 clian76 发表于 2009-01-08 18:43
中级用户 发帖 162 积分 363
Originally posted by linee at 2009-1-8 06:33 PM:

这里感觉还是用if goto简单点,用for不好实现吧。

这里我想打出多组随机数字串,想把开始转换成用:
FOR /F %%I IN ('echo %random%^&echo.%random%^&echo.%random%') do (
再让程序把这三组随机数字串的对子数和对子数值显示出来。

我试了几个小时一直没有成功,希望高手再次出招,也好学习。谢谢!
第12楼 linee 发表于 2009-01-08 21:06
初级用户 发帖 49 积分 94
Originally posted by clian76 at 2009-1-8 18:43:

这里我想打出多组随机数字串,想把开始转换成用:
FOR /F %%I IN ('echo %random%^&echo.%random%^&echo.%random%') do (
再让程序把这三组随机数字串的对子数 ...

这样试试,
第13楼 clian76 发表于 2009-01-08 23:17
中级用户 发帖 162 积分 363
Originally posted by linee at 2009-1-8 09:06 PM:

这样试试,
第14楼 netbenton 发表于 2009-01-09 00:10
银牌会员 发帖 752 积分 1,916 来自 广西
改进一下
@echo off
for /f "skip=16" %%i in (%~n0%~x0) do (
setlocal enabledelayedexpansion
set ru=0
set v=%%i
set /p=%%i <nul
for /l %%i in (1,1,20) do (if defined v (call set "a=!v:~0,1!"&call set "v=!v:~1!"&set /a num!a!+=1))
for /l %%i in (0,1,9) do (set /a var=num%%i/2&set /a ru=var+ru&if !num%%i! gtr 1 set /p=!var!对%%i <nul)
echo 共有 !ru! 对
endlocal
)
pause

goto :eof
增加了var变量用于分别显示各数出现频率
给出一串随机数字,要求找出里面有几对一样的数字。比如:



14204 1对4 共有 1 对
08448 1对4 1对8 共有 2 对
939979 2对9 共有 2 对
10257 共有 0 对
998 1对9 共有 1 对
208 共有 0 对
4293 共有 0 对

[ Last edited by netbenton on 2009-1-9 at 14:38 ]
第15楼 netbenton 发表于 2009-01-09 00:47
银牌会员 发帖 752 积分 1,916 来自 广西
Originally posted by clian76 at 2009-1-8 23:17:

有什么办法把变量:
!_str!
!j!
!strout:~0,-1!
拿到endlocal之后,就是这里的PAUSE之后让程序正常显示变量。我试了把endlocal拿到代码最后,这样程序就 ...


***把 setlocal enabledelayedexpansion 也拿到外面就可以了
只是在for里面要注意变量的必要的初始化***

***附: 这样也可以产生随机, 我也是刚发现!***

@echo off
setlocal enabledelayedexpansion
for /f "skip=20" %%i in (%~n0%~x0) do (
set ru=0&set a=
for /l %%i in (0,1,9) do set num%%i=0
call set number=%%%i
set v=!number!
set nu=(
for /l %%i in (1,1,20) do (if defined v (call set "a=!v:~0,1!"&call set "v=!v:~1!"&set /a num!a!+=1))
for /l %%i in (0,1,9) do (set /a ru=num%%i/2+ru&if !num%%i! gtr 1 set nu=!nu!和%%i)
set nu=!nu!)&set nu=!nu:(和=(!&set nu=!nu:()=!
echo !number! 有 !ru! 对 !nu!
)
pause
endlocal

goto :eof


%random%
%random%
%random%%random%
%random%%random%
%random%%random%%random%
%random%%random%%random%
%random%%random%%random%%random%
%random%%random%%random%%random%

[ Last edited by netbenton on 2009-1-9 at 14:24 ]
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023