中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-13 19:48
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [出题]文本最末列数值乘一个数
楼 主 [出题]文本最末列数值乘一个数 发表于 2008-08-07 06:57 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
这是昨晚一个朋友提出的题目,现在加深一下难度。
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...^_^
2 发表于 2008-08-07 08:24 ·  中国 广东 广州 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
这个。。。

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

而且比这个难许多。。
知,不觉多。不知,乃求知
3 发表于 2008-08-07 09:03 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
楼上的朋友不要这样说嘛,你那个题我看过,新手做得出的能有几个呢。方便新手,新手而已。不是应该从简到难的吗。。。^_^
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
4 发表于 2008-08-08 13:16 ·  中国 江苏 苏州 吴江区 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
UID 99089
性别 男
状态 离线
新手不出力,我出力吧
我写了两种方法,效率各有差异,通用性都强
方法一:(用时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 "" >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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pusofalse +7 2008-08-09 12:37
5 发表于 2008-08-09 00:59 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
UID 42345
状态 离线

@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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pusofalse +9 2008-08-09 12:37
简单!简单!再简单!
6 发表于 2008-08-09 12:35 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
我来一个:

@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 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pusofalse +7 2008-08-09 12:37
批处理之家新域名:www.bathome.net
7 发表于 2008-08-09 12:36 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
UID 115804
性别 男
状态 离线
楼上几位的代码都很精彩。学习了!
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
论坛跳转: