- 博客(229)
- 收藏
- 关注
原创 非递归解决组合问题
从m 个互不相同元素中取 n 个元素,一般选用递归或回溯算法解决,本文旨在利用进制转换的方法达到这一目的。代码如下 Sub GETALL(ByVal num As Integer, ByRef x As Variant, ByRef RESULT() As String, Optional ByRef all As Long) Dim A() As String, b() As Integ
2004-07-25 09:29:00 3896 4
原创 一道趣味数学题
题目: 将+,-,*,/ 添加到 1,2,3,4,5,6,7,8,9 之间,使其构成的算式四则运算结果等于100,如: 1*2*3*4+5+6+7*8+9=100 分析: 以上算式相当于把1~9 9 个数字和 8个(+,-,*,/ )作一个特殊顺序的排列,共有4^8=65536 种可能,再从中进行取舍。 代码: Option ExplicitPrivate Declare Function Eb
2004-07-25 01:08:00 10743 8
原创 如何得到某集合的所有子集合?
我们都知道,一个含n个元素的集合拥有2^n个子集合,并且不难发现,其中每个子集合都是从0到2^n-1 每个数的二进制格式中0 放弃,1选择的结果,如下所示: {} 000 {1} 100 {2} 010 {1,2} 110 {3} 001 {1,3} 101 {2,3} 011 {1,2,3} 1
2004-07-24 16:04:00 2459
原创 再谈八皇后问题
题目:十九世纪著名的数学家高斯提出:在8×8格的国际象棋棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。分析:其实问题可以转化为12345678的满足某种条件(行已不等,列亦不等,只需设定其不在同一斜线上,即斜率不为 1 或-1 )的排列.通过前两天用非递归方式解决序列的全排列问题(.http://blog.csdn.net
2004-07-24 00:16:00 3448
原创 关于走楼梯的递归算法
题目:一个共有20个台阶的楼梯,从下面走到上面。一次只能迈一个台阶或两个台阶,并且不能后退,走完这个楼梯共有多少种方法。分析:1 步台阶只有1种走法(1)2步台阶2种(11、2)3步台阶有3种(111、12、21)4 步台阶有5种(1111、112、121、211、22)5 步台阶有8种(11111、1112、1121、1211、122、2111、212、221)6
2004-07-23 07:12:00 6838 2
原创 非递归实现不重复序列的全排列(三)
?笔者曾利用进制转换实现不重复序列全排列(http://blog.csdn.net/northwolves/archive/2004/07/21/47400.aspx),但从0 循环到n^(n-1)-1,效率实在不高,经过仔细分析,发现一个另人激动的规律,详情见下表: ? A ? BA CBA DCBA CDBA CBDA CBAD BCA DBCA BDCA
2004-07-21 16:43:00 4002 2
原创 非递归实现不重复序列的全排列(二)
下面给出一个回溯算法的代码,在VertyNew(华) 网友提供代码(http://community.csdn.net/Expert/topic/2909/2909080.xml?temp=.9990503)基础上稍作修改: Sub pailie2(ParamArray x())Dim starttime As Single, endtime As SingleDim i As Integer,
2004-07-21 14:39:00 2172
原创 非递归实现不重复序列的全排列(一)
笔者曾写过利用递归实现不重复序列全排列的例子http://blog.csdn.net/northwolves/archive/2004/04/07/19590.aspx 现在给出另一个利用进制实现的代码: Sub pailie1(ParamArray x())Dim starttime As Single, endtime As SingleDim n As Integer, i As Long,
2004-07-21 14:29:00 4029
原创 完整的将日期时间转换为汉字的代码
下面的代码可以将任意日期(1000-01-01 0:0:0------>9999-12-31 23:59:59)转换为汉字显示 Function datename(ByVal mydate As String) As String Dim i As Long, mystr(6) As String, temp As StringConst all As String = "○一二三四五六七八九十"
2004-07-21 14:12:00 3754
原创 大数阶乘的计算(六)
前些时间写的关于大整数的阶乘计算,效率总是再难以提高:(http://dev.csdn.net/develop/article/28/28306.shtm,http://dev.csdn.net/develop/article/28/28308.shtm,http://dev.csdn.net/develop/article/28/28432.shtm,http://dev.csdn.net/de
2004-06-09 10:08:00 2171
原创 大数阶乘的计算(五)
很难想象只要改动几句代码就可以大幅提高执行的效率,在前几篇文章中我写了几种大数阶乘的算法(http://www.csdn.net/Develop/read_article.asp?id=28306,http://www.csdn.net/Develop/read_article.asp?id=28308,http://www.csdn.net/Develop/read_article.asp?id
2004-06-07 09:59:00 2109 1
原创 整数幂的求解
求整数的幂: Private Sub Command1_Click()power 64, 10000 64^10000End SubSub power(ByVal x As Long, ByVal n As Integer, Optional ByRef result As String)Dim a() As Long, s() As String, i As Long, temp As
2004-06-05 20:27:00 1524
原创 全国15亿人口中选1000个代表有多少种选法?
快速组合数C(N,K)=N*(N-1)*(N-2)*...*(N-K+1)/1*2*3*...*K 的求法: Function ZDGYS(ByVal x As Long, ByVal y As Long) As Long GET Greatest Common Divisor最大公约数 Dim TEMP As Long If x > y Then TEMP = x: x
2004-06-04 11:34:00 1489
原创 大数阶乘的计算(三)
下面的算法在 http://www.csdn.net/Develop/Edit.asp?id=28308基础上改进,比其至少快10%:Sub calcfactorial(ByVal n As Integer)Dim XYS() As Integer, x() As Integer, y() As Integer, result() As String, i As Long, j As Long
2004-05-30 17:00:00 1139
原创 实现货币金额中文大写转换的程序
今天整理文件时发现了以前写的货币金额中文转换(转换一亿亿元以下数目的货币)的代码,帖出来与大家共享: Function daxie(money As String) As String Dim x As String, y As StringConst zimu = ".sbqwsbqysbqwsbq" 定义位置代码Const letter = "0123456789sbqwy.zjf
2004-05-30 17:00:00 1713
原创 大数阶乘的计算(一)
整数n的阶乘指 1*2*3*...*(n-1)*n 的值,在n=171时,计算机一般会出错(“溢出”),本文采用字符串模拟数字乘法运算,使计算10000!成为可能:Function multi(ByVal X As String, ByVal Y As String) As String multi of two huge hexnum(两个大数之积)Dim result As Varian
2004-05-30 16:58:00 1388
原创 大数阶乘的计算(二)
http://expert.csdn.net/Expert/topic/3105/3105509.xml?temp=.1253168与笔者的另一算法(http://www.csdn.net/Develop/read_article.asp?id=28306)相比,采用下面的方法,阶乘的计算速度快了好几倍! Sub calcfactorial(ByVal n As Integer)Dim
2004-05-30 16:58:00 1282
原创 关于日期的中文转换
下面的代码可以将任意日期(1000-01-01------>9999-12-31)转换为汉字显示: Private Sub Command1_Click()MsgBox datename(Date)End SubFunction datename(ByVal mydate As Date) As StringDim i As Long, d(3) As String, myyear As
2004-05-28 10:33:00 1234
原创 关于天文数字十进制与十六进制间的转换
对于一般的整型数字,16进制与10进制 间的转化可以用CLNG(),HEX()函数解决,但遇上天文数字,这些函数就无能为力了。下面是笔者写的几个函数,演示了天文数字计算中的一些技巧。Dim largehex As String, largedec As String, start As Long, Y(20) As String预备函数Function sums(ByVal X As S
2004-05-17 17:10:00 2475
原创 如何取得文本框中包含指定字符串的行
文本框属性为允许多行显示时,由于是软回车实现的分行,无法用SPLIT(TEXT1.TEXT,VBCRLF)准确地取出指定行的内容。本文利用SENDMESSAGE 系列函数,通过发送文本框消息,实现了获取包含指定字符串的行,并演示了如何获取文本框中文本总行数和任意指定行的文本内容。add a textbox with "multiline=true","scrollbars=2".
2004-04-19 00:10:00 1806
原创 利用EXCEL 实现字符串的计算
如何计算给定的字符串计算表达式,如“ 1+2*3-4/5+ 6^7” 的值?笔者在使用EXCEL2002 时发现在单元格中可以输入此类表达式,输出的则是计算结果,所以写了一个函数,与大家共享。 引用microsoft excel 10.0 object library( OR OTHER VERSION) add a textbox and a commandbutton t
2004-04-07 22:20:00 2929
原创 递归与排列
笔者曾写过一个递归与组合的算法(http://www.csdn.net/Develop/read_article.asp?id=23809),下面给出一个排列的递归算法,请大家指教。Private Sub Command1_Click() 列出数组a 的全排列Dim a(8) As String, temp As StringFor i = 0 To 8a(i) = iNexttemp =
2004-04-07 22:15:00 2083
原创 利用API 实现字符串表达式的计算
下面实现字符串表达式计算代码由笔者收藏的本论坛代码改编,记不清是哪位网友提供的了,非常感谢。Option ExplicitPrivate Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByV
2004-04-05 23:22:00 1708
原创 能否判断动态数组有没有被分配过?
动态数组在VB语言中常能起到出奇制胜的作用。但数组有没有被重新定义或释放,用“is empty”,“is null”,“=" "”等方法都不起作用。所以判断时一般采用侦别错误消息(ON ERROR )的方法。下面给出一个非错误侦别的代码,判断动态字符串数组的分配情况: Private Sub Command1_Click()Dim a() As String, i As Lo
2004-02-05 00:49:00 1111
原创 API 更改系统菜单条目
一个运用API 更改系统菜单,复制系统菜单的例子。(需要注意的是:如果要响应菜单项的单击事件,可能要用到钩子函数和更多的代码)Option ExplicitPrivate Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVa
2004-02-02 23:31:00 1972
原创 递归与组合
福利彩票和体育彩票近两年比较火暴,相应在VB论坛上大家讨论也较多。其实选择彩票与集合选择子集相同道理。下面给出一种VB的递归算法(虽然明知存入数组会加快运算速度,但最终也没能满意地实现,请大家多多指教。另外,效率确实不高)Option ExplicitPrivate Sub Command1_Click()Dim temp, i As Long, starttime As L
2004-02-01 23:19:00 1626 1
原创 菜单字体颜色可以更改吗?
一个简单的API语句可以实现更改菜单字体颜色:Private Declare Function SetSysColors Lib "user32" (ByVal nChanges As Long, lpSysColor As Long, lpColorvalues As Long) As LongPrivate Sub Form_Load() SetSysColors 1, 7, v
2004-02-01 23:16:00 1685
原创 递归方法巧解不定方程
多元一次方程往往采用循环求解。笔者在与网友们讨论一个问题(http://expert.csdn.net/Expert/topic/2607/2607772.xml?temp=.7494928)过程中,琢磨出一种算法,采用递归进行多元一次方程的求解。并将解分为整数解和 非负整数解两种情况,请大家指教。 Private Sub Command1_Click() 演示求X1
2004-02-01 23:15:00 2872
原创 利用集合进行数组的排序
笔者在学习VB中发现利用集合可以进行排序,优化后比冒泡法快得多。下面是完整的函数代码,演示了如何进行数组的升序或降序排列。 Option ExplicitDim X(100) As DoubleDim y(100) As StringPrivate Sub Command1_Click() 演示数字排序Dim a(100) As Double, z(100) As Stri
2004-01-26 01:34:00 3932 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人