返回列表 发帖

批处理趣味数学题集

1、四个数字算24
四个数字,可以任意用加、减、乘、除来计算(只能用加、减、乘、除),最后等于24
举例:4、2、1、8四个数,(4/2+1)*8=24

要求:用四个数字4 2 1 8列出所有的结果是 24 的组合。

2、下面三角形数阵中,第2006行的左起第三个数是多少
                                              1
                                            1   1
                                           1  2   1
                                        1   3   3   1
                                     1   4    6   4    1
                                    1  5   10  10   5    1
3、将奇数依顺序排列成如图的三角形数阵从上到下称为行。那么2007为第几行的第几个数?(874)
                                                        1
                                                    3   5   7
                                                9  11  13  15   17
                                           19  21  23  25  27   29  31
4、一个自然数可以分拆成3个连续的自然数的和,又可以分拆成5个、7个、8个连续的自然数的和,这个自然数最小是?

5、一个青年今年(2007年)过生日时惊喜地发现他明年过生日的时候,他的年龄恰好是出生年份的数字之和,这位青年出生于多少年?今年他多少岁?

第二题
我认为的规律是
每行的第2位数是以递增的形式
第3位数是上一行的第2位和第3位的和

那么结果应该是
@echo off
for /l %%a in (1 1 2004) do call set /a var=%%var%%+%%a
echo %var%
pauseCOPY

[ 本帖最后由 随风 于 2007-11-2 22:47 编辑 ]
技术问题请到论坛发帖求助!

TOP

第二题
@echo off
set /a n=(((2006-2)+1)*(2006-2))/2
echo %n%
pause

[ 本帖最后由 泛滥棏慌° 于 2007-11-3 03:53 编辑 ]

TOP

第三题
@echo off
set var=-1
set p=2007
set /a num=p/2+1
if %p% lss 5 (set num=%p%)
setlocal EnableDelayedExpansion
for /l %%a in (1 2 !num!) do (
set /a num=num-%%a
set /a h+=1
set /a ss=var+2
set /a var=%%a*2+ss-2
if !num! leq 0 call :loop
)
:loop
for /l %%a in (%ss% 2 %var%) do (
set /a lis+=1
if %%a equ %p% set str=!lis!
)
echo.
echo  %p% 在第 %h% 行 第 %str%
echo.&pauseCOPY
技术问题请到论坛发帖求助!

TOP

第三题是不是可以换个思路,以减少代码呢?
@echo off &setlocal enabledelayedexpansion
set /a num=21
set /a bg=%num%,num=(%num%+1)/2
call :test
echo %bg% 在第 %hang% 行第 %num% 个数.
pause>nul
:test
for /l %%i in (1 2 9999) do (
     set /a num-=%%i
     set /a hang+=1
     if !num! leq 0 set /a num+=%%i & goto :eof)COPY
1

评分人数

TOP


不过,还是不明白为什么num的值会正好是位数.
技术问题请到论坛发帖求助!

TOP

原理简单解析:
先 通过 num=(%num%+1)/2 求得 奇数个数。
然后,拿这个数字减去 第一行 数字数目(1),再减去第二行数字数目(3)...
如果,%num%-该行数字数目如果小于 0 时,那就是最后一行了...

TOP

这个原理我知道啊.我的代码也是这个原理.
我说的是,num的值怎么会和位数是一样的?
现在明白了

[ 本帖最后由 随风 于 2007-11-3 19:17 编辑 ]
技术问题请到论坛发帖求助!

TOP

第五题
@echo off
setlocal enabledelayedexpansion
for /l %%a in (18,1,35) do (
    set 年龄=%%a
    set /a 出生年份=2008-!年龄!
    set /a 出生年份的数字之和=!出生年份:~0,1!+!出生年份:~1,1!+!出生年份:~2,1!+!出生年份:~3,1!
    if !出生年份的数字之和! equ !年龄! (
set /a 年龄-=1
echo.
echo   这位青年今年!年龄!
echo   他出生于!出生年份!
      ))
echo.
pause>nul
goto :eofCOPY

TOP

不错
技术问题请到论坛发帖求助!

TOP

本帖最后由 jains521 于 2012-10-17 16:21 编辑

第2题
:: 第2列,从第2行开始,在第2006行.那么.实际加到的行数为2006-1
:: 第3列,从第3行开始.在第2006行,为.2006-2行.
::    第3列的.特点是从1-第2006行的和
::所以有代码:
@echo off
set theline=2006
set /a "count=theline - 1 + (1+theline-2)*(theline-2)/2"
echo %count%
pause>nulCOPY

TOP

第3题
::2007 在奇数序列中排在第1004位.
::每行的增长数为2.所以有(1+n) *n/2  包含1004 n为1004所在的行.
::所以有代码:
@echo off
set /a theNumber=2007/2+1
set n=1
:x
set /a "numbers=(1+n)*n/2"
if %numbers% lss %theNumber% set /a n+=1& goto :x
set /a "befNumber=((1+n-1)*(n-1)/2)*2-1+2"
for /l %%i in (%befNumber%,1 2007) do set /a a+=1
echo 在第%n%行第%a%个.
pauseCOPY

TOP

第4题
@echo off
:: 3个连续自然数的和为n-1+n+n+1= 3n
:: 5个连续自然数的和为5n
:: 7个连续自然数的和为7n
:: 8个连续自然数的和为或者8n mod 4
for /l %%i in (1,1,10000) do (
set /a "1/!(!(%%i %% 3) & !(%%i %% 5) & !(%%i %% 7) & !((%%i-4) %% 8) )" 2> nul || (
echo %%i
set /a "t3=%%i / 3, t5=%%i / 5, t7=%%i / 7, t8=(%%i-4) / 8"
goto :end
)
)
:end
call :abc %t3% 3 t3
call :abc %t5% 5 t5
call :abc %t7% 7 t7
call :abc %t8% 8 t8
set _
pause
goto :eof
:abc
set /a "x=%2/2, start=%1-x, end=%1+x"
for /l %%i in (%start%, 1, %end%) do call set _%3=%%_%3%% %%i
goto :eofCOPY

TOP

第4题
@echo off
::5、一个青年今年(2007年)过生日时惊喜地发现他明年过生日的时候,他的年龄恰好是出生年份的数字之和,这位青年出生于多少年?今年他多少岁?
for /l %%i in (1,1,10) do (
set /a "1/((3*5*7*%%i+4) %% 8)" 2>nul || ( set /a "a=3*5*7*%%i" & call echo %%a%%)
)
pause
goto :eofCOPY

TOP

返回列表