Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4261|回复: 16

[已解决]代码 怎么运算不起来? 望修正

[复制链接]
发表于 2014-12-2 21:47 | 显示全部楼层 |阅读模式
本帖最后由 caipiaofans 于 2014-12-3 19:25 编辑

近期在找3元2次方程的东西

搜到论坛 那么帅老师的代码..
原帖子4楼
http://www.excelpx.com/thread-253977-1-1.html

原帖子的例子测试代码,是没问题的
我测试这组数据时,就无法得到结果
a1=9342
a2=9462
a3=7007

代码运行,报错了.

点调试...代码的这句 变黄了

    ReDim Arr12(1 To M, 1 To 3)

这个要如何处理啊..

QQ图片20141202212033.jpg

原附件: 0725help-1.rar (7.14 KB, 下载次数: 3)
发表于 2014-12-2 21:59 | 显示全部楼层
原附件,重新下载测试了,没有问题
回复

使用道具 举报

 楼主| 发表于 2014-12-2 22:06 | 显示全部楼层
回复

使用道具 举报

发表于 2014-12-2 22:09 来自手机 | 显示全部楼层
要是代码不多的话,就贴出来吧
,别人好看,问题解决的就快一点
回复

使用道具 举报

 楼主| 发表于 2014-12-2 22:12 | 显示全部楼层
本帖最后由 caipiaofans 于 2014-12-2 22:14 编辑
  1. '那么帅老师的代码
  2. Sub TEST()
  3.     Dim Arr11(), Arr12()
  4.     Dim A As Long, B As Long, C As Long, S As Long, MK1 As Long, MK2 As Long, MK3 As Long, K1 As Long, K2 As Long
  5.     Dim K3, K11 As Long, K12 As Long, MK21 As Long, MK31 As Long, M As Long
  6.     Dim T
  7.     T = Timer
  8.     With Sheets("SHEET1")

  9.         A = .Range("A1")
  10.         B = .Range("A2")
  11.         C = .Range("A3")
  12.         S = .Range("A4")
  13.     End With
  14.     MK1 = Round((S - B ^ 2 - C ^ 2) ^ (1 / 2) + 0.5)
  15.     MK2 = Round((S - A ^ 2 - C ^ 2) ^ (1 / 2) + 0.5)
  16.     MK3 = Round((S - A ^ 2 - B ^ 2) ^ (1 / 2) + 0.5)
  17.     For K1 = 1 To MK1 + A
  18.         K11 = S - (A - K1) ^ 2
  19.         If K11 > 0 Then
  20.             MK21 = (B - MK2) ^ 2 + (C - MK3) ^ 2
  21.             If K11 < MK21 Then
  22.                 For K2 = 1 To MK2 + B
  23.                     K12 = K11 - (B - K2) ^ 2
  24.                     If K12 > 0 Then
  25.                         K3 = K12 ^ (1 / 2)
  26.                         If K3 = Int(K3) Then
  27.                             M = M + 1
  28.                             ReDim Preserve Arr11(1 To 3, 1 To M)
  29.                             Arr11(1, M) = K1
  30.                             Arr11(2, M) = K2
  31.                             Arr11(3, M) = K3 + C
  32.                         End If
  33.                     End If
  34.                 Next K2
  35.             End If
  36.         End If
  37.     Next K1
  38.     ReDim Arr12(1 To M, 1 To 3)
  39.     For I = 1 To M
  40.         For J = 1 To 3
  41.             Arr12(I, J) = Arr11(J, I)
  42.         Next J
  43.     Next I
  44.     With Sheets("sheet2")
  45.         .Range("A2:C65536").ClearContents
  46.         .Range("A2").Resize(M, 3) = Arr12
  47.         .Select
  48.     End With
  49.     MsgBox Format(Timer - T, "0秒")
  50. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-12-2 22:13 | 显示全部楼层
那么的帅 发表于 2014-12-2 21:59
原附件,重新下载测试了,没有问题

那么帅老师好..

我测试 这个值 就出现问题

a1=9342
a2=9462
a3=7007

,,原帖子的例子 是没问题的.
回复

使用道具 举报

发表于 2014-12-2 22:39 | 显示全部楼层
caipiaofans 发表于 2014-12-2 22:13
那么帅老师好..

我测试 这个值 就出现问题

你的测试数据无解。
回复

使用道具 举报

发表于 2014-12-3 08:56 | 显示全部楼层
本帖最后由 香川群子 于 2014-12-3 12:42 编辑
caipiaofans 发表于 2014-12-2 22:13
那么帅老师好..

我测试 这个值 就出现问题

原问题帖的方程式为:
(1579-K1)*(1579-K1) + (5803-K2)*(5803-K2) + (1137-K3)*(1137-K3) = 217502634

即:(a1-x1)^2+(a2-x2)^2+(a3-x3)^2=c 这样的形式。

按你现在提供的参数,就成为:
(9342-x1)^2 + (9462-x2)^2 + (7007-x3)^2 = 217502634

按5楼代码计算结果为 M=0,即没有找到解。
导致 ReDim Arr12(1 To M, 1 To 3) 无效产生错误。即,无法定义一个 1 To 0 的数组

…………
明白了吧?

…………
更正:上了帅哥的当!
是帅哥的代码算法有问题而找不到解,并非题目无解。
不仅不是无解,而且是有很多、很多解……用14楼代码计算即可。

最后结果,计算可得到 21636组解。(每组有8个组合变化。)



回复

使用道具 举报

 楼主| 发表于 2014-12-3 09:00 | 显示全部楼层
那么的帅 发表于 2014-12-2 22:39
你的测试数据无解。

应该 是 可以解的..


只是数据有点大...


比如这组的

A1=9342
A2=1542
A3=9867

可以得到其中一组
K1=19214
K2=10195
K3=16588



回复

使用道具 举报

 楼主| 发表于 2014-12-3 09:02 | 显示全部楼层
我看了 人家的 一些结果..

都是 五位数的.....

可否直接限定在5位数之间..或许能找到解法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 22:21 , Processed in 0.747426 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表