中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-13 23:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 对称输出加分题(具有挑战性)
16 发表于 2008-07-11 01:46 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
晕。。。
ps:兄弟的代码不通用啊,如果两边都是字母或汉字怎么办?

[ Last edited by zw19750516 on 2008-7-11 at 01:49 AM ]
批处理之家新域名:www.bathome.net
17 发表于 2008-07-11 01:52 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
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...^_^
18 发表于 2008-07-11 01:55 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
提示,以中间为界同时从两边截取字符
批处理之家新域名:www.bathome.net
19 发表于 2008-07-11 01:57 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
Originally posted by zw19750516 at 2008-7-11 01:46:
晕。。。
ps:兄弟的代码不通用啊,如果两边都是字母或汉字怎么办?

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

两边都是字母?
这只能怪你出题不谨慎了。。
致精致简!
20 发表于 2008-07-11 02:01 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
果真是我想太太太复杂了。。。这题做到一半我是想放弃的,FAITH。。。
现在再做的话,我怕我果真会放弃了,如此的一个题目,想的脊椎都疼了~
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
21 发表于 2008-07-11 02:02 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
Originally posted by 26933062 at 2008-7-11 01:57:

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

我只是说明代码要提高通用性啊,没别的意思,本题他是已经做出来了,这个我不否认的。
批处理之家新域名:www.bathome.net
22 发表于 2008-07-11 02:04 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
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
23 发表于 2008-07-11 02:46 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
UID 42345
状态 离线
我想没这么长吧 报到
简单!简单!再简单!
24 发表于 2008-07-11 10:02 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
Originally posted by terse at 2008-7-11 02:46:
我想没这么长吧 报到

但解题的代码肯定都不会短,我想应该不能在10行内解决问题。
批处理之家新域名:www.bathome.net
25 发表于 2008-07-11 11:49 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
看来此题确实有点难度,我先公布本人所想的比较复杂的一种方法吧:

@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
26 发表于 2008-07-11 12:11 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
确实够绕人的。!花费了我不少时间。。。
前后共想出三种方法,第一种没通用性,后两种比较通用。
总的来说感觉思路没有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
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
bat-zw +15 2008-07-11 12:24
pusofalse +15 2008-07-11 12:51
致精致简!
27 发表于 2008-07-11 12:15 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
说老实话,我看你的化码看晕了。。。强人居然想出了三种方法。
思路突出这处在于巧妙运用了变量赋值。
缺陷我想还是在代码过于繁杂上。

[ Last edited by zw19750516 on 2008-7-11 at 01:02 PM ]
批处理之家新域名:www.bathome.net
28 发表于 2008-07-11 12:21 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
再给出本人有点取巧的代码(输入时必须按如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
29 发表于 2008-07-11 13:09 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
看了前辈们的代码,惭愧之至。。。
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
30 发表于 2008-07-11 15:18 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
再来一个,思路清晰点的。

@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 ]
致精致简!
论坛跳转: