回 帖 发 新 帖 刷新版面

主题:[新菜鸟求助]循环计算

大家好,请教一个程序:
题目是:有10个数——20、22、23、25、27、27、28、30、40、55
随意输入一个数A, 
计算出M=A/5的值,
在上述10个数中选择4个数为B、C、D、E,计算出N =B×C/(D×E),
要求屏幕上打印出M=N(精确到千分位)时的B、C、D、E(B和C,D和E允许互换)。

我编出的程序,同一组数总是出现4次,不知该怎么改下?
比如当输入A=3时,20×30/(40×25)这组出现了四种情况:
20×30/(40×25)
20×30/(25×40)
30×20/(40×25)
30×20/(25×40)
而我只需其中一组就好了,不知程序怎么编,请哪位大虾指导一下,谢谢啦



回复列表 (共20个回复)

沙发

DATA 20, 22, 23, 25, 27, 27, 28, 30, 40, 55
DIM a(10)
FOR i = 1 TO 10
READ a(i)
NEXT
INPUT a
m = a / 5
FOR i = 1 TO 10
FOR j = 1 TO 10
IF i = j THEN 10
FOR i1 = 1 TO 10
IF i = i1 OR i1 = j THEN 20
FOR j1 = 1 TO 10
IF i1 = j1 OR i = j1 OR j = j1 THEN 30
n = a(i) * a(j) / (a(i1) * a(j1))
IF ABS(m - n) < .001 THEN PRINT a(i), a(j), a(i1), a(j1), "", i, j, i1, j1: END

30 NEXT j1
20 NEXT i1
10 NEXT j
NEXT i
END


板凳

谢谢聪明一袋烟啦!
看到你编的,就知道我是差的太太太太太多了,要学的还很多。

程序很好啦,就是和我想要的结果有点出入,可能是我题目说的不清楚,
我运行了这个程序,发现同四个数是只有一组结果,可是有好几组不同的数的话,也只出现一组。

我想在屏幕上打印出所有的可使M=N的不同的4个数的组合

比如当输入A=3时,好像共有2组,希望打印出
20×30/(40×25)   ——(楼上的程序运行后,只打出这1组)
22×30/(20×45)   

而不希望打印出
20×30/(40×25)
20×30/(25×40)
30×20/(40×25)
30×20/(25×40)
22×30/(20×45)
30×22/(20×45)
22×30/(45×20)
22×30/(20×45)

不知这样的话程序怎么改呢?我自己也消化消化上面的程序,看看能不能在这个基础上改改。


再次谢谢 聪明一袋烟

3 楼

用排除法把满足条件的相同组合排除掉就可以了。2楼的程序思路是对的,可能是end的地方出错了。

4 楼

按你的要求我做了些调整,可能我理解你的原意有误,我以为你只要1组结果,现在按你的要求修改了程序,看你是否满意。去掉了end 增加了一点判断。
DATA 20, 22, 23, 25, 27, 27, 28, 30, 40, 55
DIM a(10)
FOR i = 1 TO 10
READ a(i)
NEXT
INPUT a
m = a / 5
FOR i = 1 TO 10
FOR j = 1 TO 10
IF i = j THEN 10
FOR i1 = 1 TO 10
IF i = i1 OR i1 = j THEN 20
FOR j1 = 1 TO 10
IF i1 = j1 OR i = j1 OR j = j1 THEN 30
n = a(i) * a(j) / (a(i1) * a(j1))
IF ABS(m - n) < .001 [color=FF0000][b][i]AND i < j AND i1 < j1 [/i][/b][/color]THEN PRINT a(i), a(j), a(i1), a(j1), "", i, j, i1, j1
30 NEXT j1
20 NEXT i1
10 NEXT j
NEXT i

5 楼

高人哪! ABS(m - n) < .001AND i < j AND i1 < j1,这都想得到,偷学了。

6 楼

再次谢谢聪明一袋烟

4楼程序我运行了几次,发现一个问题,当我输入a 为3时,完全符合我想要的结果(同一组数只出现一次)。
  
  但当我输入数为偶数时,同一组数要出现两次。
  
  比如当我输入a=6时,27  30  25  27  ——这组数出现了2次,
  
  当输入a=8时,共有三组不同的组合,即 22 55 27 28
                                      27 30 22 23
                                      27 40 25 27
  但是实际运行程序时,每种组合都出现了2次,运行结果如下:
        22 55 27 28
        22 55 27 28
        27 30 22 23
        27 40 25 27
        27 30 22 23
        27 40 25 27

 不知在哪个地方可以改进一下呢?谢谢

7 楼

程序并没有错,不知道你注意没有,出问题的时候都是27的时候,原因是数据中有两个27啊,只要把其中一个改成与其他的数也不同的数(比如33)就不会出问题了 。如果你认为数据无误,我好像想不出该怎么改程序了!

8 楼

是啊,你说了我才发现有27的就出现两组。不过数据没什么问题,我是想编一个机床上的程序。

9 楼

是数控吗?我没学过,不过要是数据没错 那答案也该没错啊 你没看到 我每次都输出两行啊,上面的是数值下面的是此数值在全部数值中的位置啊,我感觉如果两个27都要的话,只能是都在一侧,在两侧则无意义了。

10 楼

但是这怕也有答案重复的啊,我没办法了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册