主题:[新菜鸟求助]循环计算
苏兰清云
[专家分:0] 发布于 2008-02-20 21:22:00
大家好,请教一个程序:
题目是:有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)
而我只需其中一组就好了,不知程序怎么编,请哪位大虾指导一下,谢谢啦
最后更新于:2008-02-20 21:29:00
回复列表 (共20个回复)
沙发
聪明一袋烟 [专家分:330] 发布于 2008-02-20 23:27:00
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
板凳
苏兰清云 [专家分:0] 发布于 2008-02-21 13:23:00
谢谢聪明一袋烟啦!
看到你编的,就知道我是差的太太太太太多了,要学的还很多。
程序很好啦,就是和我想要的结果有点出入,可能是我题目说的不清楚,
我运行了这个程序,发现同四个数是只有一组结果,可是有好几组不同的数的话,也只出现一组。
我想在屏幕上打印出所有的可使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 楼
moisev [专家分:110] 发布于 2008-02-21 18:10:00
用排除法把满足条件的相同组合排除掉就可以了。2楼的程序思路是对的,可能是end的地方出错了。
4 楼
聪明一袋烟 [专家分:330] 发布于 2008-02-23 10:46:00
按你的要求我做了些调整,可能我理解你的原意有误,我以为你只要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 楼
moisev [专家分:110] 发布于 2008-02-24 19:17:00
高人哪! ABS(m - n) < .001AND i < j AND i1 < j1,这都想得到,偷学了。
6 楼
苏兰清云 [专家分:0] 发布于 2008-02-27 13:09:00
再次谢谢聪明一袋烟
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 楼
聪明一袋烟 [专家分:330] 发布于 2008-02-27 21:56:00
程序并没有错,不知道你注意没有,出问题的时候都是27的时候,原因是数据中有两个27啊,只要把其中一个改成与其他的数也不同的数(比如33)就不会出问题了 。如果你认为数据无误,我好像想不出该怎么改程序了!
8 楼
苏兰清云 [专家分:0] 发布于 2008-02-28 13:14:00
是啊,你说了我才发现有27的就出现两组。不过数据没什么问题,我是想编一个机床上的程序。
9 楼
聪明一袋烟 [专家分:330] 发布于 2008-02-28 21:37:00
是数控吗?我没学过,不过要是数据没错 那答案也该没错啊 你没看到 我每次都输出两行啊,上面的是数值下面的是此数值在全部数值中的位置啊,我感觉如果两个27都要的话,只能是都在一侧,在两侧则无意义了。
10 楼
聪明一袋烟 [专家分:330] 发布于 2008-02-28 21:38:00
但是这怕也有答案重复的啊,我没办法了。
我来回复