标题: 出些数学的题目给批处理新手练练 [打印本页]
作者: sjzong 时间: 2009-4-12 00:12 标题: 出些数学的题目给批处理新手练练
这些题目是我从网上抄了的!让大家练练!!如有版权问题请见谅!!
------------------------------------------------------------------------------------------------------
程序1:有四个数,其中任意三个数相加,所得的和分别是84,88,99,110,求这四个数?
答案:参考5楼
------------------------------------------------------------------------------------------------------
程序2:赵姑娘的岁数有以下特点:
1. 它的3次方是一个四位数,而4次方是一个六位数; 2. 这四位数和六位数正好是0到9这十个数字组成. 问,这个数应该是什么数?
【解题思路】
取一个未知数,首先分别取得该数的立方和四次方;然后将这十个数字分别分割并都定义,最后检测从0~9是否都已经被定义,如果都被定义了,则该数满足要求,否则有重复数字,不满足要求。
答案:参考6楼
----------------------------------------------------------------------------------------------------------------------------------------------
程序3:排一本辞典的页码共用了4889个数字。这本辞典共有多少页? 答案:1499
【解题思路】:以下这个办法比较直接,直接检测数字的大小,如果小于10则为1位数字,10~99两位,....然后把所以的位数加起来即可。
---------------------------------------------------------------------------------------------------------------------------------------------
程序4:阿聪说他这次去西北看见一群骆驼,共有23个驼峰,60只脚。请问单、双峰骆驼各多少只?
【解题思路】
首先从骆驼的脚的只数确定骆驼总的数目(除以4),然后依次检测从1到15间时候有符合题目的数据;
----------------------------------------------------------------------------------------------------------------------------
程序5:有一个五位奇数,将这个五位奇数中的所有2都换成5,所有5也都换成2,其他数保持不变,得到一个新的五位数,若新五位数的一半仍比原五位数大1,那么原五位数是多少?
【解题思路】
要明确的思路是:这个特殊的数字,首位必须为2,末尾必须为5(因为原来为奇数,但后来却可以有“一半”,说明是偶数,所以可以肯定,末尾是5,后来被替换成了2。
----------------------------------------------------------------------------------------------------------------------------------------------
程序6:五个连续自然数的和分别能被2、3、4、5、6整除,求满足此条件的最小的一组数。
【解题思路】
没有什么技巧性。利用等差数列公式,先算出5个数字的总和,然后检测看它是不是能被4、5、6整除。
------------------------------------------------------------------------------------------------------------------------------
程序7:我是个三位数,其中有一个数字是“3”,还有一个数字是“1”,另一个数字是未知数。如果把“3”变成“4”、把“1”变成“3”,那么,原来的我将比假设后的我的一半还少“39”。你知道原来是个什么数?
【解题思路】
利用反证法可以知道,首位数字必须为1,所以该数的排列情况就可能为:1*3或者13*,然后去检测。
--------------------------------------------------------------------------------------------------------------------------
程序8:农夫琼斯对他老婆说:"喂,玛丽亚,如果照我的办法,卖掉75只小鸡,那么咱们的鸡饲料还能维持20夭。然而,假使照你的建议,再买进100只小鸡的话,那么鸡饲料将只够维持15天。" "啊,亲爱的,"她答道,"那我们现在有多少只小鸡呢?" 问题就在这里了,他们究竟有多少只小鸡?
【解题思路】
整个过程中,小鸡吃的饲料是不变的。假设有X只鸡,则应该有:(x-75)*20=(x+100)*15,然后写一个循环,看哪个数字合适?!
----------------------------------------------------------------------------------------------------------------------------------------------
程序9:在所有的5位数当中,只包含两个3的数字有多少个?
---------------------------------------------------------------------------
程序10:将17分成几个自然数的和,求这几个自然数的最大乘积是多少?
【解题思路】
利用高中的数学知识可以证明,凡是大于等于4的数,它都可以拆成这样的两个数:它们的和与该数相等,乘积要大于等于该数。根据这样的推论,所有的数最后都会拆成这样的形式:A*A*A*A....A为2或者3(因为只有2和3不能拆了,最后剩下的肯定只有2和3)。
举例说明:8可以这样拆(没有3):num1=2*2*2*2 也可以拆成(含有2个3):num2=2*3*3,然后只要比较两个num的大小就行了!其实应该是以3来拆的数据的乘积大!
----------------------------------------------------------------------------------------------------------------------------------------------
程序11:将自然数2、3......乘到一起,它们的积的最后6位数恰好都是0,最后一个自然数最少可能是几?
***[zouzhxi思路]***********
要使积的最后一位是0,有两种情况:
1.偶数×最后一位是5的数,比如:2×15=30
2.其中一个数是整十、整百的数,比如:3×20=60
原题中,积的最后6位数恰好都是0,所以需要6个最后一位是5的数或整十、整百的数。
它们依次是:5,10,15,20,25。
由于25可以写成5×5,所以25与两个偶数相乘可以使积的尾数包含两个0,比如:25×2×2=100,
所以最后一个自然数最少应当是:25。
答案:参考8楼
---------------------------------------------------------------------------------------------------------------------------
程序12:被除数、除数和商三个数的和是181,商是12,求被除数。
--------------------------------------------------------------------------------
程序13:商店里有六箱货物,分别重15、16、18、19、20、31千克,两个顾客买走了其中五箱.已知一个顾客买的货物重量是另一个顾客的2倍,那么,商店剩下的一箱货物重量是多少千克?
【解题思路】
可以很快的推断出的一个已知条件为:那两个顾客买走的两袋货物总质量可以被3整除,另一个顾客的可以被2整除.......
----------------------------------------------------------------------------------------------------------------------------------------------
程序14:一个数除以3的余数是2,除以5的余数是1,则这个数除以15的余数是多少?
----------------------------------------------------------------------------------------------------------
程序15:有十张币值分别为1分、2分、5分、1角、2角、5角、1元、2元、5元、10元的人民币,能组成多少种不同的币值?
【解题思路】根据排列组合的相关知识,知道总共的组合可能有:num=C(10,1)+C(10,2)+..+C(10,10)
-------------------------------------------------------------------------------------------------------------------------------
程序16:两个十位数3333333333和9999999999的乘积里有几个数字是偶数? (只用乘减法能做吗?)
-----------------------------------------------------------------------------------------------------------------------------------
程序17:甲、乙、丙三个互相咬合的齿轮,若使甲轮转5圈时,乙轮转7圈,丙轮转2圈,这三个齿轮齿数最少应分别是多少齿?
----------------------------------------------------------------------------------------------------------------------------------------------
程序18:求100以内连续几个自然数之和是100.
--------------------------------------------------------------
程序19:计算2*3*……*100的积后面有几个零。
答案:参考9楼
--------------------------------------------------------------
[ 本帖最后由 sjzong 于 2009-4-17 13:39 编辑 ]
作者: Batcher 时间: 2009-4-12 02:24 标题: 回复 2楼 的帖子
初学批处理,建议从“实用”二字入手。
类似这些华而不实的东西,可以留待以后具备一定批处理功底时,再偶尔回来小试身手。
作者: 5810239q 时间: 2009-4-12 11:51
好像都不会,有难度
作者: tyc 时间: 2009-4-12 13:05 标题: 第一题
- ::先四个数之和,然后求各个数
- @echo off
- set /a all=(84+88+99+110)/3
- set /a a=all-110
- set /a b=all-99
- set /a c=all-88
- set /a d=all-84
- echo %a% %b% %c% %d%
- pause>nul
复制代码
作者: zhouyongjun 时间: 2009-4-13 13:22
第二题- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (10,1,100) do (
- set num1=%%a
- set/a num2=!num1!*!num1!*!num1!
- if !num2! geq 1000 if !num2! leq 9999 (
- set/a num3=!num2!*!num1!
- if !num3! geq 100000 if !num3! leq 999999 (
- call :pd !num2!!num3!
- )))
- pause&exit
- :pd
- for /f "delims=%1" %%i in ("0123456789") do set num4=%%i
- if not defined num4 echo !num1!
- goto :eof
复制代码
作者: sjzong 时间: 2009-4-13 21:19 标题: 回6楼 赞一个
zhouyongjun的这两句用来判断数字(0~9)有没有全部用到,实在是妙!
for /f "delims=%1" %%i in ("0123456789") do set num4=%%i
if not defined num4 echo !num1!
今天长见识了,我以前的做法分别求出这四位数和六位数,然后组成十位数,最后分别判断每一个数字是否有出现重复的!
作者: sjzong 时间: 2009-4-17 13:20 标题: 程序11
程序11:将自然数2、3......乘到一起,它们的积的最后6位数恰好都是0,最后一个自然数最少可能是几?
程序分析:要使积的最后一位是0,就必须有一个5参与,那5是由谁提供的呢?是5的倍数提供的。
它们依次是:5,10,15,20,25……
例如:5=1×5 提供1个5 ;10=2×5 提供1个5 ; 25=5×5 提供2个5 ;125=5×5×5 提供3个5……
所以最后6位都是0,就必须提供6个5参与乘积,就是从5的倍数中找到分解出6个5来。
- @echo off&setlocal EnableDelayedExpansion
- set/a num=5,count=0,cishu=6
- :a
- set /a shang=!num!
- :b
- ::b这步循环是判断5的倍数能提供几个5
- set /a yushu=!shang! %% 5
- ::余数为0,表示含有1个5,count+1,接着再判断该数除以5后的商,还能不能提供5。
- if !yushu!==0 (
- set/a count+=1
- set/a shang/=5
- goto :b
- ) else (
- rem 余数不为0,表示5的个数已经求完了,判断达到6个没有,没有再求下一个5的倍数含有5的个数。
- if not !count!==!cishu! (set /a num+=5 & goto :a)
- )
- echo 将自然数2、3......乘到一起,它们的积的最后6位数恰好都是0,最后一个自然数最少可能是!num!。
- pause
复制代码
作者: sjzong 时间: 2009-4-17 13:31 标题: 程序19
程序19:计算2*3*……*100的积后面有几个零。
程序分析:本道题是程序11的引申题,要计算乘积有几个零,只需计算5的倍数能提供5的个数就知道了。-
- @echo off&setlocal EnableDelayedExpansion
- echo 计算2*3*……*100的积后面有几个零:
- set/a num=5,count=0
- :a
- if !num! gtr 100 goto :end
- set/a shang=!num!
- :b
- set/a yushu=!shang! %% 5
- if !yushu!==0 (
- set/a count+=1
- set/a shang/=5
- goto :b
- ) else (set/a num+=5 & goto :a)
- :end
- echo 2*3*……*100的积后面有 !count! 个0。
- pause
复制代码
[ 本帖最后由 sjzong 于 2009-4-17 13:38 编辑 ]
作者: inittab 时间: 2009-4-23 17:42
程序3:- @echo off&setlocal enabledelayedexpansion
- echo 问题:排一本辞典的页码共用了4889个数字。这本辞典共有多少页?
- set num=0
- for /l %%i in (1,1,5000) do (
- if %%i lss 10 (set/a num=!num!+1) else if %%i lss 100 (set/a num=!num!+2) else if %%i lss 1000 (set/a num=!num!+3) else if %%i lss 10000 (set/a num=!num!+4)
- if !num! equ 4889 (echo.答案:%%i页&pause>nul&goto :eof)
- )
复制代码
作者: inittab 时间: 2009-4-23 18:23
程序4- @echo off&setlocal enabledelayedexpansion
- echo\阿聪说他这次去西北看见一群骆驼,共有23个驼峰,60只脚。请问单、双峰骆驼各多少只?
- set/a num=60/4
- for /l %%i in (1,1,!num!) do (
- set/a m=%%i,n=15-m
- set/a tf=m+2*n
- if !tf! equ 23 (echo\答:单、双峰骆驼各!m!,!n!只&pause&goto :eof)
- )
复制代码
作者: inittab 时间: 2009-4-23 19:13
程序5. 范了个低级错误。调了N次,终于调成了。
-
- @echo off&setlocal enabledelayedexpansion
- echo\有一个五位奇数,将这个五位奇数中的所有2都换成5,所有5也都换成2,其他数保持不变,
- echo\得到一个新的五位数,若新五位数的一半仍比原五位数大1,那么原五位数是多少?
- for /l %%i in (20005,10,29995) do (
- set num=%%i
- set var=!num:2=a!&set var=!var:5=2!&set var=!var:a=5!
- set/a var0=var/2-1
- if !var0! equ !num! (echo 答案是: !num!&pause&goto :eof)
- )
复制代码
[ 本帖最后由 inittab 于 2009-4-23 19:52 编辑 ]
作者: inittab 时间: 2009-4-24 19:27
程序13
分析:买走的货物重量能被3整除,先计算总重量。分别减去每种货的重量。提取出能被3整除五除货物。本题恰好只能一个可以被3整除。答案很快就会出来。但为了计算两个客人都买走了那些货物,还需要对留下的5种货物进行循环计算,最终出结果。- @echo off&setlocal enabledelayedexpansion
- cls
- echo.
- echo\ 问题:商店里有六箱货物,分别重15、16、18、19、20、31千克,
- echo\两个顾客买走了其中五箱.已知一个顾客买的货物重量是另一个顾客的2倍,
- echo\那么,商店剩下的一箱货物重量是多少千克?
- echo\=====================================================================================
- set str0=15 16 18 19 20 31
- set/a total=15+16+18+19+20+31
- for %%i in (!str0!) do (
- set/a var1=%%i,md=total-var1,avr=md/3,ys=md%%3
- if !ys! equ 0 (
- set "str1=!str0:%%i =!"
- for %%j in (!str1!) do (
- set/a var2=%%j,var3=avr-%%j
- set "str2=!str1:%%j =!"
- for %%l in (!str2!) do (
- if !var3! equ %%l (
- set var4=!str2:%%l =!
- echo 答案:商店剩下的一箱货物重量是:!var1!
- echo 一客人买走了!var2! !var3!两箱的货物,另一客人分别买走了!var4!货物
- pause>nul&goto:eof
- )))))
复制代码
有更好的算法,请赐教。
作者: P_Ricky 时间: 2010-4-14 15:11
程序8:- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (1 1 1000) do (
- set /a n1="(%%i -75)*20"
- set /a n2="(%%i+100)*15"
- if !n1!==!n2! echo %%i
- )
复制代码
作者: lixiaofei521 时间: 2010-4-19 20:30
严重打击学习热情
作者: mangci 时间: 2010-5-14 00:12
- @ echo off
- title=有四个数,其中任意三个数相加,求这四个数
- set /a num=(84+88+99+110)/3
- set /a num1=%num%-84
- set /a num2=%num%-88
- set /a num3=%num%-99
- set /a num4=%num%-110
- echo,第一个数%num1%
- echo,第二个数%num2%
- echo,第三个数%num3%
- echo,第四个数%num4%
- pause
复制代码
作者: poxi 时间: 2010-7-19 17:27
做了一下午..做出来8个...
=========
大大们帮检查...
是不是给点奖励捏.....
========
end;
作者: rogue_1983 时间: 2010-8-2 15:16 标题: 大哥,这是给新手做的吗?
我真郁闷了,这是给新手做的啊?用到数学逻辑推理,而且用到很多批处理命令。我倒!
作者: fish 时间: 2010-8-6 18:25 标题: 【程序3】自己胡乱写了一个,前辈们别见笑哈。
- @echo off
- set s=1
- set t=9
- set p=9
- set /p page=请输入辞典的页码:
- set count=1
-
- :start
- if %p% geq %page% goto calc
- set /a count+=1
- set /a p*=10
- set /a t+=p*count
- goto start
- :calc
-
- set /a t-=p*count
- set /a t=(page-t)/count
- set /a count-=1
- for /l %%i in (1,1,%count%) do set /a s*=10
- set /a s+=t-1
- set /p=这本辞典共有%s%页。
复制代码
作者: dong815 时间: 2011-1-28 19:19 标题: 回复 7楼 的帖子
能帮忙解释一下那两行吗?delims不是分割符的意思吗?我新手,怎么都看不懂
作者: keiamy 时间: 2014-2-11 13:59
本帖最后由 keiamy 于 2014-2-11 14:08 编辑
程序6:參考了youxi01的- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1 1 1000) do (
- set "flag=0"&set "a=!b!"
- set "b=!c!"&set "c=!d!"
- set "d=!e!"&set "e=%%i"
- if "!a!" geq "1" (
- set /a "num=a+b+c+d+e"
- for %%j in (4 5 6) do (
- set /a "n=!num!%%%%j"
- if !n! neq 0 set "flag=1")
- if !flag!==0 echo !a! !b! !c! !d! !e!&pause&exit))
复制代码
作者: keiamy 时间: 2014-2-11 14:10
- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1 1 1000) do (
- set /a "flag=0,num+=%%i"
- if %%i gtr 4 (
- set /a "n=%%i-5"
- for %%j in (!n!) do set /a "m+=%%j"
- set /a "num1=num-m"
- for %%k in (4 5 6) do (
- set /a "x=num1%%%%k"
- if !x! neq 0 set "flag=1")
- if !flag!==0 set "num2=%%i"&goto end))
- :end
- set /a "num3=num2-4"
- for /l %%i in (%num3% 1 %num2%) do set /p=%%i <nul
- pause>nul
复制代码
原來規律是1+2+...5=15, 2+3...+6=20,簡單複雜化了.......
作者: keiamy 时间: 2014-2-11 20:02
本帖最后由 keiamy 于 2014-2-11 20:06 编辑
程序7:- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (0 1 9) do (
- set /a "num=3%%i4/2-39"
- if !num!==1%%i3 echo 1%%i3)
- pause
复制代码
作者: keiamy 时间: 2014-2-11 21:42
本帖最后由 keiamy 于 2014-2-13 18:12 编辑
程序10:- @echo off
- set "num=17"
- set /a "x=1,n=num/3,m=num%%3"
- for /l %%i in (1 1 %n%) do (set /a x*=3)
- if %m%==2 set /a "x*=2"
- if %m%==1 set /a "x=x*4/3"
- echo %x%
- pause
复制代码
作者: qq399254368 时间: 2014-2-12 10:33
第二题
zhouyongjun 发表于 2009-4-13 13:22
for /f "delims=%1" %%i in ("0123456789") do set num4=%%i
if not defined num4 echo !num1!中的 delims=%1引用的是什么哦
作者: battab 时间: 2014-2-12 11:11
回复 1# sjzong
程序4:- @echo off&setlocal enabledelayedexpansion
- set /a shuliang=60/4
- for /l %%i in (1 1 15) do (
- for /l %%j in (14 -1 0) do (
- set /a num=%%i+2*%%j,zhi=%%i+%%j
- if "!num!" == "23" (
- if "!zhi!"== "%shuliang%" (
- echo 单峰驼%%i只,双峰驼%%j只。
- )
- )
- )
- )
- pause>nul
- exit
复制代码
作者: qq399254368 时间: 2014-2-12 11:48
程序4:
@echo off
set /a all=60/4
set /a a=23-all
set /a b=all-a
echo 双驼峰的数量:%a%
echo 单驼峰的数量:%b%
pause
作者: battab 时间: 2014-2-12 12:01
回复 27# qq399254368
“set /a a=23-all” 这句把驼峰数减去骆驼数量得到的数a是什么东西,怎么解释?
作者: qq399254368 时间: 2014-2-12 14:33
本帖最后由 qq399254368 于 2014-2-12 14:48 编辑
第六题
::五个连续自然数的和等于第三位自然数的5倍自然被5整除,所以只要算出第三位自然数被4,6整除即可!
@echo off &setlocal enabledelayedexpansion
for /l %%a in (1,1,10000) do (
set three=%%a
set /a one=!three!-2
set /a two=!three!-1
set /a fore=!three!+1
set /a five=!three!+2
set /a var0=!three!%%4
set /a var1=!three!%%6
if !var0!==0 if !var1!==0 (
echo !one! !two! !three! !fore! !five!&goto end)
)
:end
pause
作者: qq399254368 时间: 2014-2-12 14:39
回复 28# battab
不好意思,自行用了数学运算!
作者: qq399254368 时间: 2014-2-12 14:50
回复 29# qq399254368
新手不知道如何取最小的数值,只能用goto了,求大神指导精简!
作者: qq399254368 时间: 2014-2-13 11:31
第七题
方法1:- @echo off
- setlocal enabledelayedexpansion
- set x=75
- :start
- set /a x+=1
- set /a var0="(!x!-75)*20"
- set /a var1="(!x!+100)*15"
- if !var0!==!var1! (echo !x!) else (goto start)
- pause
复制代码
方法2- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (75,1,1000) do (
- set x=%%i
- set /a x+=1
- set /a var0="(!x!-75)*20"
- set /a var1="(!x!+100)*15"
- if !var0!==!var1! echo !x!
- )
- pause
复制代码
方法2为什么会跑完75-1000,如何让其找到数值600就终止呢!
作者: qq399254368 时间: 2014-2-13 17:03
程序11,写了下面代码,为什么从2开始计算的时候是正确的,计算到13以后就成负数了,请问错在什么地方!- @echo off
- set a=1
- set b=1
- :start
- set /a a+=1
- set /a b=b*a
- set /a c=%b%%%1000000
-
- if %c%==0 (echo %a%) else (goto start)
- pause
复制代码
作者: qq399254368 时间: 2014-2-13 18:32
程序14- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1,1,10000) do (
- set a=%%i
- set /a b=!a!%%3
- set /a c=!a!%%5
- set /a d=!a!%%15
- if !b!==2 if !c!==1 (echo !d!&goto end)
- )
- :end
- pause
复制代码
作者: zqy220422 时间: 2014-11-13 12:06
都是高手啊,看不懂
作者: zqy220422 时间: 2014-11-13 12:06
都是高手啊,看不明白
作者: 605389735 时间: 2014-11-14 11:56
回复 27# battab
好思路!
作者: 605389735 时间: 2014-11-14 11:56
回复 27# qq399254368
27# 好思路
作者: shelluserwlb 时间: 2014-11-20 20:49
- @echo off
- goto :START
- 程序2:赵姑娘的岁数有以下特点:
- 1. 它的3次方是一个四位数,而4次方是一个六位数; 2. 这四位数和六位数正好是0到9这十个数字组成.
- 问,这个数应该是什么数?
- :START
- ::根据题意(平方是4位数),确定求值范围。
- for /l %%i in (10,1,21) do (
- setlocal EnableDelayedExpansion
- set /a sum1=0
- set /a sum2=1
- set /a num1=%%i*%%i*%%i
- set /a num2=!num1!*%%i
- set n0=!num1:~0,1!
- set n1=!num1:~1,1!
- set n2=!num1:~2,1!
- set n3=!num1:~3,1!
- set n4=!num2:~0,1!
- set n5=!num2:~1,1!
- set n6=!num2:~2,1!
- set n7=!num2:~3,1!
- set n8=!num2:~4,1!
- set n9=!num2:~5,1!
- for /l %%j in (0,1,9) do (
- if not "!n%%j!"==" " set /a sum1+=!n%%j!
- )
- for /l %%j in (0,1,9) do (
- if not "!n%%j!"==" " (if !n%%j! neq 0 (set /a sum2*=!n%%j!))
- )
- if !sum1! equ 45 (if !sum2! equ 362880 (
- echo 赵姑娘的岁数是%%i
- echo 2次方: !num1!
- echo 3次方: !num2!
- ))
- endlocal
- )
- pause>nul
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |