[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理趣味数学题集

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位的和

那么结果应该是
  1. @echo off
  2. for /l %%a in (1 1 2004) do call set /a var=%%var%%+%%a
  3. echo %var%
  4. pause
复制代码

[ 本帖最后由 随风 于 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

第三题
  1. @echo off
  2. set var=-1
  3. set p=2007
  4. set /a num=p/2+1
  5. if %p% lss 5 (set num=%p%)
  6. setlocal EnableDelayedExpansion
  7. for /l %%a in (1 2 !num!) do (
  8. set /a num=num-%%a
  9. set /a h+=1
  10. set /a ss=var+2
  11. set /a var=%%a*2+ss-2
  12. if !num! leq 0 call :loop
  13. )
  14. :loop
  15. for /l %%a in (%ss% 2 %var%) do (
  16. set /a lis+=1
  17. if %%a equ %p% set str=!lis!
  18. )
  19. echo.
  20. echo  %p% 在第 %h% 行 第 %str% 位
  21. echo.&pause
复制代码
技术问题请到论坛发帖求助!

TOP

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

评分人数

TOP


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

TOP

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

TOP

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

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

TOP

第五题
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (18,1,35) do (
  4.     set 年龄=%%a
  5.     set /a 出生年份=2008-!年龄!
  6.     set /a 出生年份的数字之和=!出生年份:~0,1!+!出生年份:~1,1!+!出生年份:~2,1!+!出生年份:~3,1!
  7.     if !出生年份的数字之和! equ !年龄! (
  8. set /a 年龄-=1
  9. echo.
  10. echo   这位青年今年!年龄!岁
  11. echo   他出生于!出生年份!
  12.       ))
  13. echo.
  14. pause>nul
  15. goto :eof
复制代码

TOP

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

TOP

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

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

TOP

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

TOP

第4题
  1. @echo off
  2. :: 3个连续自然数的和为n-1+n+n+1= 3n
  3. :: 5个连续自然数的和为5n
  4. :: 7个连续自然数的和为7n
  5. :: 8个连续自然数的和为或者8n mod 4
  6. for /l %%i in (1,1,10000) do (
  7. set /a "1/!(!(%%i %% 3) & !(%%i %% 5) & !(%%i %% 7) & !((%%i-4) %% 8) )" 2> nul || (
  8. echo %%i
  9. set /a "t3=%%i / 3, t5=%%i / 5, t7=%%i / 7, t8=(%%i-4) / 8"
  10. goto :end
  11. )
  12. )
  13. :end
  14. call :abc %t3% 3 t3
  15. call :abc %t5% 5 t5
  16. call :abc %t7% 7 t7
  17. call :abc %t8% 8 t8
  18. set _
  19. pause
  20. goto :eof
  21. :abc
  22. set /a "x=%2/2, start=%1-x, end=%1+x"
  23. for /l %%i in (%start%, 1, %end%) do call set _%3=%%_%3%% %%i
  24. goto :eof
复制代码

TOP

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

TOP

返回列表