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

[数值计算] 【已解决】求助批处理计算相加结果是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 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

  如果四个数不允许有任何两个重复,那么,可以缩小for循环的范围:
  1、最小值:84-(1+2+3)=78;
  2、最大值:110-(1+2+3)=104;

  因此,for /l 嵌套的起止值不用从1到110,只需从78到104即可,可以大为减少循环次数。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

注意语法
  1. if !result!==84 (
  2.   if !result1!==88 (
  3.     if !result2!==99
  4.       if !result3!==110 (
  5.         echo.%%a %%b %%c %%d
  6.       )
  7.     )
  8.   )
  9. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

分析:
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)
代码(小学版):
  1. @echo off
  2. set /a num=84+88+99+110,num/=3
  3. set /a a=num-110,b=num-99,c=num-88,d=num-84
  4. echo 四数分别为:%a% %b% %c% %d%
  5. pause>nul
复制代码
1

评分人数

***共同提高***

TOP

  1. @echo off
  2. set /a sum=(84+88+99+110)/3
  3. set /a num_4=sum-84
  4. set /a num_3=sum-88
  5. set /a num_2=sum-99
  6. set /a num_1=sum-110
  7. set num_
  8. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

汗水,比4楼晚了5秒钟。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

都是这么聪明的?
我看了好一会,才看明白是怎么回事...

不过,现在的年轻人真是不厚道,直接运算出结果了
违背了LZ的初衷...

TOP

这个不素小学的问题么,相加求和。。。
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

设四个数分别是a,b,c,d,把楼主给出的四个数字都相加的话就得到
3(a+b+c+d)=84+88+99+110,这样得到a+b+c+d的值.有了这个思路就好办了,用总和减去楼主给的四个数字,得到的就是三个里面另外一个没有相加的数字。
所以代码很简单,如下:
  1. @echo off
  2. set /a sum=(84+88+99+110)/3
  3. set /a b=sum-84,c=sum-88,d=sum-99,e=sum-110
  4. echo 四个数分别为:%b% %c% %d% %e%
  5. pause>nul
复制代码
Still with wax

TOP

回复 1楼 的帖子

非常感谢大家 的帮助,请大家帮助我改一下我的语法
说一下我的语法为什么错
谢谢

TOP

回复 10楼 的帖子

你的意思是3楼的语法不对?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

楼上的仁兄,你误解了。我只是想知道我的语法为什么会错

[ 本帖最后由 wangjmh 于 2009-3-29 13:24 编辑 ]

TOP

最简单的一个错误是三个for一个if,前面只有4个(,你后面咋就用了5个)呢?
Still with wax

TOP

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)
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

非常感谢大家 的指点!

TOP

返回列表