中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [出题]文本最末列数值乘一个数
作者:
标题: [出题]文本最末列数值乘一个数 上一主题 | 下一主题
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『楼 主』:  [出题]文本最末列数值乘一个数

这是昨晚一个朋友提出的题目,现在加深一下难度。
a.txt
7_.__  69923.3.__.. _69923_
._. _927 18.92__3. _4828_
7 53__3_01337.64_ 2489__133_
1. _45_._ 0 .7.8_2.__7627_
.4.1 _.245.3._9 72_5_576___ _
以_和空格作为分隔符,最后一列的数值乘以7,其他不变。
已知的条件,数字是随机的,最末列的数值是整数,即使乘以7,仍在CMD所能计算范围内。
_与空格与“.”的位置和数量与每行的列数都是随机的。
输出如下:
7_.__  69923.3.__.. _489461_
._. _927 18.92__3. _33796_
7 53__3_01337.64_ 2489__931_
1. _45_._ 0 .7.8_2.__53389_
.4.1 _.245.3._9 72_5_4032___ _
只是对最末列的数值进行运算操作,其他不变。
要求通用,高效。

[ Last edited by pusofalse on 2008-8-7 at 07:22 AM ]



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





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 2 楼』:  

这个。。。

乱序取值的题中已经有过类似的了。。

而且比这个难许多。。



知,不觉多。不知,乃求知
2008-8-7 08:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




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

楼上的朋友不要这样说嘛,你那个题我看过,新手做得出的能有几个呢。方便新手,新手而已。不是应该从简到难的吗。。。^_^



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




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 4 楼』:  

新手不出力,我出力吧
我写了两种方法,效率各有差异,通用性都强
方法一:(用时0.25~0.30秒)
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (LastNumberChange.txt) do set/a n+=1&set LastLine=$%%i$
for /f "delims=" %%i in (LastNumberChange.txt) do (
set/a m+=1
if %n% neq !m! call set "all=!all!%%i&echo."
)

:start
set FirstNumber=%LastLine:~,1%
set "all1=!all1!%FirstNumber%"
set LastLine=%LastLine:~1%
echo %LastLine%|findstr "[0-9]" >nul&&goto :start
:all1
set /a t+=1
call set LastOne=%%all1:~-!t!%%
set/a x=LastOne*1
if "%LastOne%"=="%x%" goto :all1
set/a LastOne=%LastOne:~1%*7
set /a t-=1
set xlm=!all1:~,-%t%!
Set "Sum=%all%%xlm%%LastOne%%LastLine%"
echo %Sum:$=%
pause
方法二:(用时0.02~0.05秒)
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (LastNumberChange.txt) do set/a n+=1&set LastLine=$%%i$
for /f "delims=" %%i in (LastNumberChange.txt) do (
set/a m+=1
if %n% neq !m! call set "all=!all!%%i&echo."
)
:LastOne
set/a x+=1
call set LastOne=%%LastLine:~-!x!,1%%
set /a Mult=%LastOne%*1
if not "%Mult%"=="%LastOne%" goto :LastOne
set/a x-=1
call set Front=%%LastLine:~,-%x%%%
call set Last=%%LastLine:~-%x%%%
:Middle
set/a x1+=1
call set LastOne1=%%Front:~-!x1!%%
set /a Mult1=%LastOne1%*1
if "%Mult1%"=="%LastOne1%" goto :Middle
set/a Middle=%LastOne1:~1%*7
set/a x1-=1
call set Front=%%Front:~,-%x1%%%
set "Sum=%all%%Front%%Middle%%Last%"
echo %Sum:$=%
pause


   此帖被 +7 点积分      点击查看详情   
评分人:【 pusofalse 分数: +7  时间:2008-8-9 12:37


2008-8-8 13:16
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





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


@echo off&setlocal enabledelayedexpansion
for /l %%i in (0 1 9) do set %%i=%%i
    set .=.
    for /f "delims=" %%i in (1.txt) do set "str=%%i"&call:lp
    pause&goto :eof
:lp
set/a n+=1
set var=!str:~-%n%,1!
if defined !var! (set str2=!var!!str2!&set lp=lp) else (
    if not defined lp (set str1=!var!!str1!) else (
    set/a str2*=7&set str=!str:~,-%n%!!var!!str2!!str1!
    echo !str!
    for %%i in (str1 str2 n lp) do set %%i=
    goto :eof
    ))
    goto lp


   此帖被 +9 点积分       点击查看详情   
评分人:【 pusofalse 分数: +9  时间:2008-8-9 12:37




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

永远的学习者


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

我来一个:
@echo off
for /f "delims=" %%i in (1.txt) do (
    set "str=%%i"&set "begin=a"
  setlocal enabledelayedexpansion
    call :lp
    echo !str!!a!!var!!last!
  endlocal
)
pause>nul&goto :eof
:lp
set "a=%str:~-1%"&set "str=%str:~,-1%"
if "%a%" geq "0" (
   if "%a%" leq "9" set "flag=a"&set "begin="
)
if defined flag (
   set var=%a%!var!&set "flag="
   ) else (
   if defined begin (
      set last=%a%!last!
      ) else (
      set /a var*=7
      goto :eof
   )
)
goto lp
[ Last edited by bat-zw on 2008-8-9 at 12:46 PM ]

   此帖被 +7 点积分      点击查看详情   
评分人:【 pusofalse 分数: +7  时间:2008-8-9 12:37




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




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

楼上几位的代码都很精彩。学习了!



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-8-9 12:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: