中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 对称输出加分题(具有挑战性)
« [1] [2] [3] [4] [5] »
作者:
标题: 对称输出加分题(具有挑战性) 上一主题 | 下一主题
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 16 楼』:  

晕。。。
ps:兄弟的代码不通用啊,如果两边都是字母或汉字怎么办?

[ Last edited by zw19750516 on 2008-7-11 at 01:49 AM ]



批处理之家新域名:www.bathome.net
2008-7-11 01:46
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 17 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-7-11 01:46 AM:
晕。。。
ps:兄弟的代码不通用啊,如果两边都是字母或汉字怎么办?

[ Last edited by zw19750516 on 2008-7-11 at 01:49 AM ]

还请多指教!~



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-7-11 01:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 18 楼』:  

提示,以中间为界同时从两边截取字符



批处理之家新域名:www.bathome.net
2008-7-11 01:55
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 19 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-7-11 01:46:
晕。。。
ps:兄弟的代码不通用啊,如果两边都是字母或汉字怎么办?

[ Last edited by zw19750516 on 2008-7-11 at 01:49 AM ]

两边都是字母?
这只能怪你出题不谨慎了。。



致精致简!
2008-7-11 01:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 20 楼』:  

果真是我想太太太复杂了。。。这题做到一半我是想放弃的,FAITH。。。
现在再做的话,我怕我果真会放弃了,如此的一个题目,想的脊椎都疼了~



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-7-11 02:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 21 楼』:  



  Quote:
Originally posted by 26933062 at 2008-7-11 01:57:

两边都是字母?
这只能怪你出题不谨慎了。。

我只是说明代码要提高通用性啊,没别的意思,本题他是已经做出来了,这个我不否认的。



批处理之家新域名:www.bathome.net
2008-7-11 02:02
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 22 楼』:  



  Quote:
Originally posted by pusofalse at 2008-7-11 02:01:
果真是我想太太太复杂了。。。这题做到一半我是想放弃的,FAITH。。。
现在再做的话,我怕我果真会放弃了,如此的一个题目,想的脊椎都疼了~

胜利往往是跟在你感觉再也挺不住的那一刻之后的。
ps:兄弟们,我先睡觉了,明天还要上班,期待有人写出高效通用的代码(我的就先不发了)。。。

[ Last edited by zw19750516 on 2008-7-11 at 02:08 AM ]



批处理之家新域名:www.bathome.net
2008-7-11 02:04
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 23 楼』:  

我想没这么长吧  报到



简单!简单!再简单!
2008-7-11 02:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 24 楼』:  



  Quote:
Originally posted by terse at 2008-7-11 02:46:
我想没这么长吧  报到

但解题的代码肯定都不会短,我想应该不能在10行内解决问题。



批处理之家新域名:www.bathome.net
2008-7-11 10:02
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 25 楼』:  

看来此题确实有点难度,我先公布本人所想的比较复杂的一种方法吧:
@echo off&setlocal enabledelayedexpansion
set str=0123456789abcdefghij
:lp
set a=%str:~,1%&set /a n+=1
set .%n%=%a%&set _%n%=!str:~-1,1!&set str=%str:~1,-1%
if defined str goto lp
set /p code=please enter the code:
:loop
set a=%code:~,1%&set var=%var% !a!&set code=%code:~1%
if defined code goto loop
for /l %%a in (1,1,%n%) do (
    for %%i in (%var%) do (
        if "!.%%a!" equ "%%i" set flag=a
        if "!_%%a!" equ "%%i" set flag=a
    )
    if defined flag (
       set str1=!str1!!.%%a!&set str2=!_%%a!!str2!&set "flag="
       ) else (
       set str1=!str1!#&set str2=#!str2!
))
cls&echo %str1% ^| %str2%&pause>nul




批处理之家新域名:www.bathome.net
2008-7-11 11:49
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 26 楼』:  

确实够绕人的。!花费了我不少时间。。。
前后共想出三种方法,第一种没通用性,后两种比较通用。
总的来说感觉思路没有zw19750516的清晰。。。 已经迷糊了。被绕晕了。。。
代码一、
左边的必须是数字。(不通用、仅针对顶楼的题目)
@echo off&setlocal enabledelayedexpansion
echo.&set /p num= 请输入 &cls
set "str=a b c d e f g h i j"
set "var1=##########"
set /a n=10
for %%a in (%str%) do (
  set /a n-=1&set .%%a=!n!&set .!n!=!n!&set "_!n!=%%a"
)
for /l %%a in (0 1 9) do (
  if not "!num:~%%a,1!"=="" set num2=!num2! !num:~%%a,1!
)
for %%a in (!num2!) do (
  set /a n=!.%%a!+1
  call set "var1=%%var1:~0,!.%%a!%%!.%%a!%%var1:~!n!%%"
)
for /l %%a in (0 1 9) do (
  if "!var1:~%%a,1!"=="#" (set var2=#!var2!) else set "var2=!_%%a!!var2!"
)
echo.&echo  !var1!   !var2!
pause>nul
代码二、
通用点的,不局限于数字、左右两边可以是任意字符但不能有重复。
@echo off&setlocal enabledelayedexpansion
set "str1=abcdefghij"&set "str2=tsrqponmlk"
for /l %%a in (0 1 9) do (
   set ".!str1:~%%a,1!=!str1:~%%a,1!"
   set ".!str2:~%%a,1!=!str1:~%%a,1!"
   set "_!str1:~%%a,1!=#"
   set "_!str2:~%%a,1!=#"
)
echo  !str1!  klmnopqrst
echo.&set /p num= 请输入 &cls&echo  !num!
echo.&echo  !str1!  klmnopqrst
set num=!num: =!
for /l %%a in (0 1 9)do if not "!num:~%%a,1!"=="" set num2=!num2! !num:~%%a,1!
for %%a in (!num2!) do set _%%a=!.%%a!&set "_!.%%a!=!.%%a!"
for /l %%a in (0 1 9) do call set "var1=!var1! %%_!str1:~%%a,1!%%"
set /a nnn=-1
for %%a in (!var1!) do (
  set /a nnn+=1
  if "%%a"=="#" (set var2=#!var2!) else call set "var2=%%str2:~!nnn!,1%%!var2!"
)
echo.&echo  !var1: =!  !var2!
pause>nul
代码三、
@echo off&setlocal enabledelayedexpansion
set "str1=abcdefghij"&set "str2=tsrqponmlk"
set var1=##########&set var2=!var1!
echo  !str1!  klmnopqrst
echo.&set /p num= 请输入 &cls&echo  你输入的是 !num!
echo.&echo  !str1!  klmnopqrst
set num=!num: =!
for /l %%a in (0 1 9)do if not "!num:~%%a,1!"=="" set num2=!num2! !num:~%%a,1!
for /l %%a in (0 1 9) do (
   set /a mmm=%%a+1
   set ".!str1:~%%a,1!=!mmm!"
   set ".!str2:~%%a,1!=!mmm!"
)
for %%a in (!num2!) do (
  set /a hhh=!.%%a!-1
  call set var1=%%var1:~0,!hhh!%%%%str1:~!hhh!,1%%%%var1:~!.%%a!%%
  call set var2=%%var2:~0,!hhh!%%%%str2:~!hhh!,1%%%%var2:~!.%%a!%%
)  
for /l %%a in (0 1 9) do set var3=!var2:~%%a,1!!var3!
echo.&echo  !var1!  !var3!
pause>nul


   此帖被 +30 点积分         点击查看详情   
评分人:【 bat-zw 分数: +15  时间:2008-7-11 12:24
评分人:【 pusofalse 分数: +15  时间:2008-7-11 12:51




致精致简!
2008-7-11 12:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 27 楼』:  

说老实话,我看你的化码看晕了。。。强人居然想出了三种方法。
思路突出这处在于巧妙运用了变量赋值。
缺陷我想还是在代码过于繁杂上。

[ Last edited by zw19750516 on 2008-7-11 at 01:02 PM ]



批处理之家新域名:www.bathome.net
2008-7-11 12:15
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 28 楼』:  

再给出本人有点取巧的代码(输入时必须按如1 a f 4这样的方式):
@echo off&setlocal enabledelayedexpansion
set str=0j 1i 2h 3g 4f 5e 6d 7c 8b 9a
set /p code=请输入字符,中间请用空格格开:
for %%a in (%str%) do (set a=%%a
    for %%i in (%code%) do (
        if "%%i" equ "!a:~,1!" set flag=a
        if "%%i" equ "!a:~1!" set flag=a
    )
    if defined flag (
       set str1=!str1!!a:~,1!&set str2=!a:~1!!str2!&set "flag="
       ) else (
       set str1=!str1!#&set str2=#!str2!
))
cls&echo %str1% ^| %str2%&pause>nul




批处理之家新域名:www.bathome.net
2008-7-11 12:21
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 29 楼』:  

看了前辈们的代码,惭愧之至。。。



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-7-11 13:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 30 楼』:  

再来一个,思路清晰点的。
@echo off&setlocal enabledelayedexpansion
set "str1= 0 1 2 3 4 5 6 7 8 9"
set "str2= j i h g f e d c b a"
echo.&set /p num= 请输入 &cls&set num=!num: =!
for %%a in (!str1! !str2!) do set num=!num:%%a= %%a!
for %%a in (%str1%) do set /a wei+=1,weis=wei*2

for /l %%a in (1 2 !weis!) do (
   set ".!str1:~%%a,1!=!str2:~%%a,1!"
   set ".!str2:~%%a,1!=!str1:~%%a,1!"
)
for %%a in (!num!)do set _%%a=a&set _!.%%a!=a
for %%a in (!str1!)do if defined _%%a (set var1=!var1!%%a) else set "var1=!var1!#"
for %%a in (!str2!)do if defined _%%a (set var2=%%a!var2!) else set "var2=#!var2!"
echo.&echo  !var1!  !var2!
pause>nul
[ Last edited by 26933062 on 2008-7-11 at 04:14 PM ]



致精致简!
2008-7-11 15:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: