标题: [数值计算] 【已解决】求助批处理计算相加结果是84,88,99,110的四个数? [打印本页]
作者: wangjmh 时间: 2009-3-28 18:17 标题: 【已解决】求助批处理计算相加结果是84,88,99,110的四个数?
有四个数,其中任意三个数相加,所得的和分别是84,88,99,110,求这四个数?
我自己写了个代码但运行起来不正确,而且此算法太浪费资源,请大侠们帮我改正代码,并给出一个效率更高的代码
@echo off&&setlocal ENABLEDELAYEDEXPANSION
for /l %%a in (1 1 110) do (
for /l %%b in (1 1 110) do (
for /l %%c in (1 1 110) do (for /l %%d in (1 1 110) do(
set/a result=%%a+%%b+%%c
set/a result1=%%b+%%c+%%d
set/a result2=%%a+%%b+%%d
set/a result3=%%a+%%c+%%d
if "!result!"==84 && "!result1!"==88 &&"!result2!"==99 &&"!result3!"==110 (
echo %%a && echo %%b && echo %%c &&echo &&d
)
)
)
)
)
pause
[ 本帖最后由 wangjmh 于 2009-3-30 21:27 编辑 ]
作者: namejm 时间: 2009-3-28 18:52
如果四个数不允许有任何两个重复,那么,可以缩小for循环的范围:
1、最小值:84-(1+2+3)=78;
2、最大值:110-(1+2+3)=104;
因此,for /l 嵌套的起止值不用从1到110,只需从78到104即可,可以大为减少循环次数。
作者: Batcher 时间: 2009-3-28 18:58
注意语法- if !result!==84 (
- if !result1!==88 (
- if !result2!==99
- if !result3!==110 (
- echo.%%a %%b %%c %%d
- )
- )
- )
- )
复制代码
作者: batman 时间: 2009-3-28 18:59
分析:
a+b+c=84 a+b+d=88 a+c+d=99 b+c+d=110
(a+b+c)+(a+b+d)+(a+c+d)+(b+c+d)=3*(a+b+c+d)
代码(小学版):- @echo off
- set /a num=84+88+99+110,num/=3
- set /a a=num-110,b=num-99,c=num-88,d=num-84
- echo 四数分别为:%a% %b% %c% %d%
- pause>nul
复制代码
作者: Batcher 时间: 2009-3-28 19:04
- @echo off
- set /a sum=(84+88+99+110)/3
- set /a num_4=sum-84
- set /a num_3=sum-88
- set /a num_2=sum-99
- set /a num_1=sum-110
- set num_
- pause
复制代码
作者: Batcher 时间: 2009-3-28 19:05
汗水,比4楼晚了5秒钟。
作者: youxi01 时间: 2009-3-28 21:08
都是这么聪明的?
我看了好一会,才看明白是怎么回事...
不过,现在的年轻人真是不厚道,直接运算出结果了
违背了LZ的初衷...
作者: defanive 时间: 2009-3-28 21:14
这个不素小学的问题么,相加求和。。。
作者: Lumiere 时间: 2009-3-28 21:31
设四个数分别是a,b,c,d,把楼主给出的四个数字都相加的话就得到
3(a+b+c+d)=84+88+99+110,这样得到a+b+c+d的值.有了这个思路就好办了,用总和减去楼主给的四个数字,得到的就是三个里面另外一个没有相加的数字。
所以代码很简单,如下:- @echo off
- set /a sum=(84+88+99+110)/3
- set /a b=sum-84,c=sum-88,d=sum-99,e=sum-110
- echo 四个数分别为:%b% %c% %d% %e%
- pause>nul
复制代码
作者: wangjmh 时间: 2009-3-28 22:00 标题: 回复 1楼 的帖子
非常感谢大家 的帮助,请大家帮助我改一下我的语法
说一下我的语法为什么错
谢谢
作者: Batcher 时间: 2009-3-28 22:03 标题: 回复 10楼 的帖子
你的意思是3楼的语法不对?
作者: wangjmh 时间: 2009-3-29 13:22
楼上的仁兄,你误解了。我只是想知道我的语法为什么会错
[ 本帖最后由 wangjmh 于 2009-3-29 13:24 编辑 ]
作者: Lumiere 时间: 2009-3-30 11:48
最简单的一个错误是三个for一个if,前面只有4个(,你后面咋就用了5个)呢?
作者: wxcute 时间: 2009-3-30 12:45
if "!result!"==84 && "!result1!"==88 &&"!result2!"==99 &&"!result3!"==110
IF 语句是不能这样用的,请查找相关教程。
IF (条件) (命令)
具体如:IF "!str!“=="GOOD" echo !str!
以上是完整的一条 IF 语句。
而&&连接连接符是用在语句之间,而不能用来断开一个完整的语句。
正确用法如下:
嵌套:IF A==B (IF B==C (echo B) echo C)
并接:(IF A==B echo B)&&(IF B==C echo C)
作者: wangjmh 时间: 2009-3-30 21:14
非常感谢大家 的指点!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |