Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: telexon

[已解决]助求14X+21Y+26Z=488正整数解?

[复制链接]
发表于 2013-10-21 22:53 | 显示全部楼层
telexon 发表于 2013-10-21 22:52
dearS: 怎么提示错误,“溢出”,我实在不懂

是什么情况?上个附件上来看看?是不是改的数据太大了?
回复

使用道具 举报

 楼主| 发表于 2013-10-21 23:39 | 显示全部楼层
CheryBTL 发表于 2013-10-21 22:53
是什么情况?上个附件上来看看?是不是改的数据太大了?

谢谢了,我调好了,明天请帮我做二元的,请看附件

Book1.rar

15.66 KB, 下载次数: 6

回复

使用道具 举报

发表于 2013-10-22 07:55 | 显示全部楼层    本楼为最佳答案   
适合二元或三元都行:
  1. Sub ep()
  2.     Dim i As Integer, j As Integer, k As Integer, Rnum As Integer
  3.     Dim re()
  4.     Dim Totalsum As Integer, X1 As Integer, X2 As Integer, X3 As Integer
  5.     X1 = Sheets(1).Range("d2")
  6.     X2 = Sheets(1).Range("e2")
  7.     X3 = Sheets(1).Range("f2")
  8.     Totalsum = Sheets(1).Range("g2")

  9.     For i = 0 To Totalsum / X1
  10.         For j = 0 To Totalsum / X2
  11.             If X3 > 0 Then
  12.                 For k = 0 To Totalsum / X3
  13.                     If Totalsum = X1 * i + X2 * j + X3 * k Then
  14.                         m = m + 1
  15.                         ReDim Preserve re(1 To 3, 1 To m)
  16.                         re(1, m) = i
  17.                         re(2, m) = j
  18.                         re(3, m) = k
  19.                     End If
  20.                 Next k
  21.             Else
  22.                 If Totalsum = X1 * i + X2 * j Then
  23.                     m = m + 1
  24.                     ReDim Preserve re(1 To 3, 1 To m)
  25.                     re(1, m) = i
  26.                     re(2, m) = j
  27.                 End If
  28.             End If
  29.         Next j
  30.     Next i
  31.     Sheets(1).[a1].Resize(UBound(re, 2), 3) = Application.Transpose(re)
  32. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-10-22 08:45 | 显示全部楼层
CheryBTL 发表于 2013-10-22 07:55
适合二元或三元都行:

真的太感谢您了。每天给我省了1个小时;以后还要向你学习和帮忙!谢了
回复

使用道具 举报

发表于 2013-10-22 08:59 | 显示全部楼层
回复

使用道具 举报

发表于 2013-10-22 09:06 | 显示全部楼层
  1. Sub Test()
  2.     Dim s$, A$(), R As New RegExp, K$()
  3.     s = Application.InputBox("Ax+By+Cz=D", "请加入A,B,C,D的值,以逗号隔开且为正整数", "14,21,26,488", , , , , 2)
  4.     If Len(s) = 0 Then Exit Sub
  5.     A = Split(s, ",")
  6.     s = VBA.String(CLng(A(3)), "@")
  7.     With R
  8.         .Global = True
  9.         .Pattern = "^(.+?)\1{" & CLng(A(0)) - 1 & "}(.+)\2{" & CLng(A(1)) - 1 & "}(.+)\3{" & CLng(A(2)) - 1 & "}$"
  10.         If .Test(s) Then
  11.             K = Split(.Replace(s, "$1 $2 $3"))
  12.             MsgBox "已求方程的最小正整数解为" & vbCrLf & "A:" & Len(K(0)) & "  ;B:" & Len(K(1)) & "  ;C:" & Len(K(2))
  13.         Else
  14.             MsgBox "方程无正整数解"
  15.         End If
  16.     End With
  17. End Sub
复制代码

评分

参与人数 1 +18 收起 理由
CheryBTL + 18 很给力!

查看全部评分

回复

使用道具 举报

发表于 2013-10-22 14:51 | 显示全部楼层
看看
回复

使用道具 举报

 楼主| 发表于 2013-10-22 21:10 | 显示全部楼层
CheryBTL 发表于 2013-10-22 07:55
适合二元或三元都行:

DEAR,为何验算又对呢,请帮助看一附件

Book1.rar

10.13 KB, 下载次数: 4

回复

使用道具 举报

 楼主| 发表于 2013-10-22 21:13 | 显示全部楼层
telexon 发表于 2013-10-22 21:10
DEAR,为何验算又对呢,请帮助看一附件

DEAR,为何验算又不对呢,请帮助看一附,当参数改6.5,9.5,等就不行了。我查不出原因。8858!
回复

使用道具 举报

发表于 2013-10-22 21:50 | 显示全部楼层
telexon 发表于 2013-10-22 21:13
DEAR,为何验算又不对呢,请帮助看一附,当参数改6.5,9.5,等就不行了。我查不出原因。8858!

原来定义的参数类型为整数,你输入的是小数,当然会出错
改下变更的类型即可:
  1. Dim Totalsum As Integer, X1 As Single, X2 As Single, X3 As Single
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 14:25 , Processed in 0.297609 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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