标题: 批处理趣味数学题集 [打印本页]
作者: youxi01 时间: 2007-11-2 18:23 标题: 批处理趣味数学题集
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年)过生日时惊喜地发现他明年过生日的时候,他的年龄恰好是出生年份的数字之和,这位青年出生于多少年?今年他多少岁?
作者: 随风 时间: 2007-11-2 22:41
第二题
我认为的规律是
每行的第2位数是以递增的形式
第3位数是上一行的第2位和第3位的和
那么结果应该是- @echo off
- for /l %%a in (1 1 2004) do call set /a var=%%var%%+%%a
- echo %var%
- pause
复制代码
[ 本帖最后由 随风 于 2007-11-2 22:47 编辑 ]
作者: foxJL 时间: 2007-11-2 23:10
第二题
@echo off
set /a n=(((2006-2)+1)*(2006-2))/2
echo %n%
pause
[ 本帖最后由 泛滥棏慌° 于 2007-11-3 03:53 编辑 ]
作者: 随风 时间: 2007-11-3 01:18
第三题
- @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.&pause
复制代码
作者: youxi01 时间: 2007-11-3 10:09
第三题是不是可以换个思路,以减少代码呢?- @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)
复制代码
作者: 随风 时间: 2007-11-3 13:46
好
不过,还是不明白为什么num的值会正好是位数.
作者: youxi01 时间: 2007-11-3 14:54
原理简单解析:
先 通过 num=(%num%+1)/2 求得 奇数个数。
然后,拿这个数字减去 第一行 数字数目(1),再减去第二行数字数目(3)...
如果,%num%-该行数字数目如果小于 0 时,那就是最后一行了...
作者: 随风 时间: 2007-11-3 15:08
这个原理我知道啊.我的代码也是这个原理.
我说的是,num的值怎么会和位数是一样的?
现在明白了
[ 本帖最后由 随风 于 2007-11-3 19:17 编辑 ]
作者: ieutk 时间: 2007-12-10 03:04
第五题- @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 :eof
复制代码
作者: 随风 时间: 2007-12-10 08:17
不错
作者: jains521 时间: 2012-10-17 16:16
本帖最后由 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>nul
复制代码
作者: jains521 时间: 2012-10-17 16:42
第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%个.
- pause
复制代码
作者: jains521 时间: 2012-10-17 17:43
第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 :eof
复制代码
作者: jains521 时间: 2012-10-17 19:17
第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 :eof
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |