这是昨晚一个朋友提出的题目,现在加深一下难度。
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 ]
新手不出力,我出力吧
我写了两种方法,效率各有差异,通用性都强
方法一:(用时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