标题: [出题]文本最末列数值乘一个数
[打印本页]
作者: pusofalse
时间: 2008-8-7 06:57
标题: [出题]文本最末列数值乘一个数
这是昨晚一个朋友提出的题目,现在加深一下难度。
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 ]
作者: flyinspace
时间: 2008-8-7 08:24
这个。。。
乱序取值的题中已经有过类似的了。。
而且比这个难许多。。
作者: pusofalse
时间: 2008-8-7 09:03
楼上的朋友不要这样说嘛,你那个题我看过,新手做得出的能有几个呢。方便新手,新手而已。不是应该从简到难的吗。。。^_^
作者: huahua0919
时间: 2008-8-8 13:16
新手不出力,我出力吧
我写了两种方法,效率各有差异,通用性都强
方法一:(用时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
作者: terse
时间: 2008-8-9 00:59
@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
作者: bat-zw
时间: 2008-8-9 12:35
我来一个:
@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 ]
作者: pusofalse
时间: 2008-8-9 12:36
楼上几位的代码都很精彩。学习了!