中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 数值比较 上一主题 | 下一主题
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 16 楼』:  

借了楼上的思路
@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 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2010-12-1 20:28
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 17 楼』:  

在方法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 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-12-1 22:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 18 楼』:  

方法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 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-12-2 04:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 19 楼』:  

Hanyeguxing 的2,3,4种方法,对下例组合,测试结果不对:

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



精简
[你的+我的+他的]=>[大家的]    个人网志   
2010-12-2 04:36
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 20 楼』:  



  Quote:
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 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-12-2 09:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: