|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『楼 主』:
对称输出加分题(具有挑战性)
-----------------------------------
有如下对应关系:
0123456789 | abcdefghij
要求写出人机交互批处理,
-----------------------------------
当输入7时,输出如下:
#######7## | ##c#######
当输入a5时,输出如下:
#####5###9 | a###e#####
当输入12j时,输出如下:
012####### | #######hij
-----------------------------------
1 本人会视解题思路和技巧予以加分(重在思路)。
2 如不想处理特殊字符,可以略去中间的|不输出。
3 请在解答时注意代码的通用性,并请尽量保持代码简洁(考虑问题复杂化,解决
问题简单化)。
4 在人机交互界面时进行输入时可尽量为解题提供便利。
5 不需写出对输入字符进行判断的代码部分。
-----------------------------------
-----------------------------------
pusofalse兄弟在15楼已第一个解答出此题,但其代码明显过于复杂且不通用,因
此仅加上1分。
本人也在25楼给出了一个解决方案(代码还是复杂点了)。
已有多种解决方案(10楼、25楼、26楼、28楼、29楼、35楼、37楼、38楼...),
个人还是倾向于在28楼给出的方案(最佳方案还要大家来评定),代码如下:
@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 本人认为此代码集合了思路清晰、通用、简洁、高效等特点。
特此推介terse兄的代码如下:
@echo off&setlocal enabledelayedexpansion
set/p p=请输入:
set str=27j834fi56a901bghcde
set st=!str!&set pt=!p!
:lp
set ..!p:~%n%,1!=ok&set/a n+=1
set .!str:~,1!=!str:~-1,1!
set str=!str:~1,-1!
if defined str goto lp
:lp1
if defined ..%st:~,1% (set var1=!var1!%st:~,1%&set var2=!.%st:~,1%!!var2!)else (
if defined ..!.%st:~,1%! (set var1=!var1!%st:~,1%&set var2=!.%st:~,1%!!var2!)else set var1=!var1!#&set var2=#!var2!)
set st=!st:~1,-1!&set pt=!pt:~1!
if defined st goto lp1
echo !var1! ^| !var2!
pause -----------------------------------
在此谢谢大家对本贴的踊跃回复,但唯一感到不足的就是基本都是高级会员
(quya老土其实也是位元老级的会员),而少见新人的踪迹,希望新人都有勇于挑
战的精神,我不断出题的原意也在于此了。
-----------------------------------
[ Last edited by zw19750516 on 2008-7-13 at 09:44 AM ]
|
批处理之家新域名:www.bathome.net |
|
2008-7-10 21:16 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
2 楼』:
可不可能输入 2a5f 这样字母和数字交错的情况?
|
致精致简! |
|
2008-7-10 21:41 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
|
2008-7-10 21:42 |
|
|
wxcute
中级用户
积分 458
发帖 211
注册 2006-7-26
状态 离线
|
『第
4 楼』:
如果输入的是e5呢?
==!
是挺难的,很费脑子。
[ Last edited by wxcute on 2008-7-10 at 10:29 PM ]
|
┌───────┐
├→学习→实践→┤
└───────┘ |
|
2008-7-10 22:18 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
5 楼』:
这题不像是给新手做的啊~
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-7-10 22:27 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
6 楼』:
还真是费脑子,总算写出来了,代码比较臃肿,先看看新手们的吧。。。
|
致精致简! |
|
2008-7-10 22:38 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
7 楼』:
第一反应就是字符串逆序,不知道思路是否对头。
|
|
|
2008-7-10 22:41 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by HAT at 2008-7-10 22:41:
第一反应就是字符串逆序,不知道思路是否对头。 |
|
这一思路是对的,但解决办法是多样的。
|
批处理之家新域名:www.bathome.net |
|
2008-7-10 23:02 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
9 楼』:
还多样,就一样就已经把我的头搞大了。。。
|
致精致简! |
|
2008-7-10 23:10 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
10 楼』:
果真难。。。 但快成功了,繁杂,太繁杂。。。
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-7-11 00:37 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
|
2008-7-11 00:47 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
12 楼』:
终于成功了。。。将近4个小时的努力。。。- -|||
繁杂。。。
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-7-11 01:26 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
13 楼』:
Quote: | Originally posted by pusofalse at 2008-7-11 01:26:
终于成功了。。。将近4个小时的努力。。。- -|||
繁杂。。。 |
|
兄弟是不是想得太复杂了啊。
ps:你可以发你的代码了。
[ Last edited by zw19750516 on 2008-7-11 at 01:44 AM ]
|
批处理之家新域名:www.bathome.net |
|
2008-7-11 01:42 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
14 楼』:
可能。。。1个多小时根本没思路。。。
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-7-11 01:44 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
15 楼』:
Quote: | Originally posted by zw19750516 at 2008-7-11 01:42 AM:
兄弟是不是想得太复杂了啊。
ps:你可以发你的代码了。
[ Last edited by zw19750516 on 2008-7-11 at 01:44 AM ] |
|
可能。。。1个多小时根本没思路。。。
写完了再看看,也没什么新思路。。。
@echo off&setlocal enabledelayedexpansion
set str=0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j
set str1=%str: =%
set n=10
set letter=%str:~19%
set num=%str:~,19%
for %%a in (%letter%) do (
set/a n-=1
set !n!=%%a
set %%a=!n!
)
set/p var=Input:
set var3=%var%
:pu
if defined var3 (
set var4=!var3:~,1!
if !var4! leq 9 set "shuzi=!shuzi!!var4! "
if !var4! gtr 9 call :shuzi
set var3=!var3:~1!
goto pu
)
goto lp
:shuzi
set "shuzi=!shuzi!!%var4%! "
goto :eof
:lp
if defined str1 (
set str2=!str1:~,1!
for %%a in (%shuzi%) do if "-!str2!" equ "-%%a" goto next
for %%a in (%shuzi%) do if "-!str2!" neq "-%%a" set str2=#
:next
set pus=!pus!!str2!
set str1=!str1:~1!
goto lp
)
set will=%pus:~,10%
:will
if defined will (
set wil=!will:~-1!
call :w
set will=!will:~0,-1!
goto will
)
echo %pus:~,10%^|%false%
pause>nul&exit/b
:w
if defined %wil% (set false=!false!!%wil%!) else set false=!false!%wil%
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-7-11 01:45 |
|