中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-29 12:54
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 数值比较 查看 3,186 回复 19
16 发表于 2010-12-01 20:28 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
借了楼上的思路
@echo off&setlocal enabledelayedexpansion
for %%a in (1 2) do (
set/p $%%a=输入第 %%a 组:
set n=0
for %%b in (!$%%a!) do (set /a n+=1&set $%%a-%%b=1&set $%%a-%%b-!n!=1)
)
set/a n=0,$a=0,$b=0
for %%a in (%$1%) do (
set /a n+=1
if defined $2-%%a-!n! set /a $a+=1&set $2-%%a=
if defined $2-%%a set /a $b+=1
)
echo %$a%A%$b%B
pause


要考虑的问题还真多,下面的可以了:

@echo off
:lp
endlocal&setlocal enabledelayedexpansion
for %%a in (1 2) do (
set/p $%%a=输入第 %%a 组:
set n=0
for %%b in (!$%%a!) do (set /a n+=1&set/a $%%a.%%b +=1&set $%%a.%%b.!n!=1)
)
set/a n=0,$a=0,$b=0
for %%a in (%$1%) do (
set /a n+=1
if defined $2.%%a.!n! (set /a $a+=1,$2.%%a -=1) else set st=!st! %%a
)
for %%a in (%st%) do if !$2.%%a! gtr 0 set /a $b+=1,$2.%%a -=1

echo %$a%A%$b%B&echo;&echo;&goto :lp


[ Last edited by netbenton on 2010-12-1 at 01:28 ]
精简
=> 个人网志
17 发表于 2010-12-01 22:51 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
在方法1和方法2中,都可以把
for /l %%a in (1,1,%Ye1%) do if "!#%%a!"=="!@%%a!" set/a Xing1+=1&set Gu1=!Gu1:%%a =!
改成
for %%a in (%Gu1%) do if "!#%%a!"=="!@%%a!" set/a Xing1+=1&set Gu1=!Gu1:%%a =!


[ Last edited by Hanyeguxing on 2010-12-2 at 09:52 ]
18 发表于 2010-12-02 04:07 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
方法1和方法2中,除了定义变量组外,还定义了一个序号变量(Gu1、Gu2),获取A、B的值,都可以通过循环这个序号变量完成,如果不去定义这个序号变量,还可以通过删除变量组中用过的变量来完成:
@echo off&setlocal enabledelayedexpansion
for %%a in (1 2) do set Xing%%a=0&set/p Han%%a=输入第 %%a 行字符:
for %%a in (%Han1%) do set/a Ye1+=1&set #!Ye1!=%%a
for %%a in (%Han2%) do set/a Ye2+=1&set @!Ye2!=%%a
for /l %%a in (1,1,%Ye1%) do if "!#%%a!"=="!@%%a!" set/a Xing1+=1&set #%%a=&set @%%a=
for %%a in (%Han1%) do (
set/a Gu1+=1,Gu2=0
for %%b in (%Han2%) do (
set/a Gu2+=1
if "%%a"=="%%b" if defined #!Gu1! if defined @!Gu2! set/a Xing2+=1&set #!Gu1!=&set @!Gu2!=
))
echo %Xing1%A%Xing2%B&pause&exit


@echo off&setlocal enabledelayedexpansion
for %%a in (1 2) do set Xing%%a=0&set/p Han%%a=输入第 %%a 行字符:
for %%a in (%Han1%) do set/a Ye1+=1&set #!Ye1!=%%a
for %%a in (%Han2%) do set/a Ye2+=1&set @!Ye2!=%%a
for /l %%a in (1,1,%Ye1%) do if "!#%%a!"=="!@%%a!" set/a Xing1+=1&set #%%a=&set @%%a=
call:Han %Han1%
echo %Xing1%A%Xing2%B&pause&exit
:Han
set/a Gu1+=1,Gu2=0
for %%a in (%Han2%) do (
set/a Gu2+=1
if "%%a"=="%1" if defined #!Gu1! if defined @!Gu2! set/a Xing2+=1&set #!Gu1!=&set @!Gu2!=
)
shift
if not "%1"=="" goto:Han


[ Last edited by Hanyeguxing on 2010-12-2 at 10:27 ]
19 发表于 2010-12-02 04:36 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
Hanyeguxing 的2,3,4种方法,对下例组合,测试结果不对:

1 1 2 2 1 1 1
2 1 2 1 1 1 2
精简
=> 个人网志
20 发表于 2010-12-02 09:18 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
Originally posted by netbenton at 2010-12-2 04:36:
Hanyeguxing 的2,3,4种方法,对下例组合,测试结果不对:

1 1 2 2 1 1 1
2 1 2 1 1 1 2

实际测试方法1和2没问题,3和4错误
究其原因是方法3和4在设计思路上就是错误的,因为是否优先获得A的全部值,结果很可能不同。
汗一个先,已经修改了。。。

[ Last edited by Hanyeguxing on 2010-12-2 at 10:16 ]
论坛跳转: