送高分: 关于数组比较的程序, 涉及整数的二进制表示.

sema 2006-01-06 11:35:46
编写一个程序,首先随机生成1000个在 0 至 (2的10次方 -1) 之间的整数,存为x[1],x[2],……,x[1000],然后找出所有x[i]和x[j]对,i≠j,使得x[i]和x[j]两个整数的二进制表示中最多有两位不同。
...全文
153 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sema 2006-01-07
  • 打赏
  • 举报
回复
非常感谢两位指教。请到这里领分:

http://community.csdn.net/Expert/topic/4501/4501607.xml?temp=.1983148
northwolves 2006-01-06
  • 打赏
  • 举报
回复
To coldleafzl() :

首先题目问得有问题,什么叫“两个整数的二进制表示中最多有两位不同”?是说转换成二进制代码后有两位不同?这个不同包含了什么意思?其次看程序,我仔细看了一下,分析一下,请 northwolves(狼行天下) 指教一下:Sub MAKERAND()负责产生随机数,存入数组。dectoBin负责产生16进制数,但是Abs(Len(dectoBin(A)) - Len(dectoBin(B))) > 2这句有什么用?
ISFIT函数用的不是地方吧?比较的不是随机数组里面的数?
---------------

呵呵,没注意:

Option Explicit
Dim X(1 To 1000) As Long
Private Sub Command1_Click()
MAKERAND
Dim i As Integer, j As Integer, K As Long, result() As String
For i = 1 To 999
For j = i + 1 To 1000
If ISFIT(X(i), X(j)) Then
K = K + 1
ReDim Preserve result(1 To K) '用于输出
result(K) = "X(" & i & ")=" & X(i) & "[" & dectoBin(X(i)) & "]" & vbCrLf & vbCrLf & "X(" & j & ")=" & X(j) & "[" & dectoBin(X(j)) & "]"
End If
Next
Next
MsgBox result(Int(Rnd * K + 1)), vbOKOnly, "共有" & K & "对满足条件!" '显示满足条件的个数,并随机显示满足条件的一对用于检验
End Sub
Sub MAKERAND()
Dim i As Long
For i = 1 To 1000
Randomize
X(i) = Int(Rnd * 2 ^ 10) '随机产生100个2 ^ 10以内的整数
Next
End Sub
Function ISFIT(ByVal A As Long, ByVal B As Long) As Boolean
Dim TEMP As String
TEMP = dectoBin(A Xor B) '异或,按位比较
ISFIT = (Len(TEMP) - Len(Replace(TEMP, "1", "")) <= 2) '1 的个数大于2说明至少2位以上不同
End Function

Function dectoBin(X As Long) As String
Const Bins = "0000000100100011010001010110011110001001101010111100110111101111"
Dim i As Integer, s As String, y As String
y = Hex(X)
s = ""
For i = 1 To Len(y)
s = s + Mid(Bins, (Val("&h" + Mid(y, i, 1)) * 4 + 1), 4) '经十六进制转换为二进制
Next
dectoBin = Format(s, "0")
End Function

northwolves 2006-01-06
  • 打赏
  • 举报
回复
上面的代码其实有问题,加注释重写:

Option Explicit
Dim X(1 To 1000) As Long
Private Sub Command1_Click()
MAKERAND
Dim i As Integer, j As Integer, K As Long, result() As String
For i = 1 To 999
For j = i + 1 To 1000
If ISFIT(i, j) Then
K = K + 1
ReDim Preserve result(1 To K) '用于输出
result(K) = "X(" & i & ")=" & X(i) & "[" & dectoBin(X(i)) & "]" & vbCrLf & vbCrLf & "X(" & j & ")=" & X(j) & "[" & dectoBin(X(j)) & "]"
End If
Next
Next
MsgBox result(Int(Rnd * K + 1)), vbOKOnly, "共有" & K & "对满足条件!" '显示满足条件的个数,并随机显示满足条件的一对用于检验
End Sub
Sub MAKERAND()
Dim i As Long
For i = 1 To 1000
Randomize
X(i) = Int(Rnd * 2 ^ 10) '随机产生100个2 ^ 10以内的整数
Next
End Sub
Function ISFIT(ByVal A As Long, ByVal B As Long) As Boolean
Dim TEMP As String
TEMP = dectoBin(A Xor B) '异或,按位比较
ISFIT = (Len(TEMP) - Len(Replace(TEMP, "1", "")) <= 2) '1 的个数大于2说明至少2位以上不同
End Function

Function dectoBin(X As Long) As String
Const Bins = "0000000100100011010001010110011110001001101010111100110111101111"
Dim i As Integer, s As String, y As String
y = Hex(X)
s = ""
For i = 1 To Len(y)
s = s + Mid(Bins, (Val("&h" + Mid(y, i, 1)) * 4 + 1), 4) '经十六进制转换为二进制
Next
dectoBin = Format(s, "0")
End Function
coldleafzl 2006-01-06
  • 打赏
  • 举报
回复
首先题目问得有问题,什么叫“两个整数的二进制表示中最多有两位不同”?是说转换成二进制代码后有两位不同?这个不同包含了什么意思?其次看程序,我仔细看了一下,分析一下,请 northwolves(狼行天下) 指教一下:Sub MAKERAND()负责产生随机数,存入数组。dectoBin负责产生16进制数,但是Abs(Len(dectoBin(A)) - Len(dectoBin(B))) > 2这句有什么用?
ISFIT函数用的不是地方吧?比较的不是随机数组里面的数?
rainstormmaster 2006-01-06
  • 打赏
  • 举报
回复
//什么意思?:
Const Bins = "0000000100100011010001010110011110001001101010111100110111101111"

就是16进制的数,0,1,2,....,D,E,F的2进制表示
0:0000
1:0001
2:0010
....
E:1110
F:1111

将这些数据连起来,就得到了字串: "0000000100100011010001010110011110001001101010111100110111101111"
sema 2006-01-06
  • 打赏
  • 举报
回复
什么意思?:
Const Bins = "0000000100100011010001010110011110001001101010111100110111101111"
sema 2006-01-06
  • 打赏
  • 举报
回复
如果不是 2的10次方 -1, 而是 2的30次方 -1 呢?
northwolves 2006-01-06
  • 打赏
  • 举报
回复
随手写的,看看对不对
northwolves 2006-01-06
  • 打赏
  • 举报
回复
Option Explicit
Dim X(1 To 1000) As Long
Private Sub Command1_Click()
MAKERAND
Dim i As Integer, J As Integer, K As Long, result() As String
For i = 1 To 999
For J = i + 1 To 1000
If ISFIT(i, J) Then
K = K + 1
ReDim Preserve result(1 To K)
result(K) = "X(" & i & ")=" & X(i) & "[" & dectoBin(X(i)) & "]" & vbCrLf & vbCrLf & "X(" & J & ")=" & X(J) & "[" & dectoBin(X(J)) & "]"
End If
Next
Next
MsgBox result(Int(Rnd * K + 1)), vbOKOnly, "共有" & K & "对满足条件!"
End Sub
Sub MAKERAND()
Dim i As Long
For i = 1 To 1000
Randomize
X(i) = Int(Rnd * 2 ^ 10)
Next
End Sub
Function ISFIT(ByVal A As Long, ByVal B As Long) As Boolean
ISFIT = True
If Abs(Len(dectoBin(A)) - Len(dectoBin(B))) > 2 Then
ISFIT = False
Exit Function
Else

Dim TEMP As Long, r As Integer
r = 0
TEMP = A And B
Do While TEMP
r = r + 1
TEMP = TEMP And (TEMP - 1)
If r > 2 Then
ISFIT = False
Exit Do
End If
Loop
End If
End Function

Function dectoBin(X As Long) As String
Const Bins = "0000000100100011010001010110011110001001101010111100110111101111"
Dim i As Integer, s As String, y As String
y = Hex(X)
s = ""
For i = 1 To Len(y)
s = s + Mid(Bins, (Val("&h" + Mid(y, i, 1)) * 4 + 1), 4)
Next
dectoBin = Format(s, "0")
End Function
英文版 以下是我从网上所的相关介绍 内容简介 本书以X86系列微机为背景,从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言编程的行种基础知识和编程技巧,内容涉及到数据表示、存储器管理、各种数据类型、过程、与汇编语言相关的体系结构、控制结构、文件、宏指令、位处理指令、字符串指令、MMX指令、类和对象,以及混合语言编程等,尤其是在高级汇编语言(HLA)方面,该书给予了细致深入的讲解。对于有意学习X86汇编语言编程的程序员来说,这是一本难得的好书。 本书的作者Randall Hyde拥有十多年的汇编语言教学经验,并且开发了多个商用软件,具有实际的汇编语言开发经验。该书的英文网络版受到全球成千上万的网站和高级程序员的高度评价,被大家公推为高级汇编语言编程的经典之作。该书的英文正版推出不久,即有很多人在“亚马逊”网站上为其作评,而且几乎所有的人都给予5星的高分,可见其内容之好 目录 第1章 进入汇编语言的世界 1.1 本章概述 1.2 HLA程序的结构 1.3 运行第一个HLA程序 1.4 基本的HLA数据声明 1.5 布尔值 1.6 字符值 1.7 Intel80x86处理器简介 1.8 基本的机器指令 1.9 基本的HLA控制结构 1.10 HLA标准库入门 1.11 关于TRY..ENDTRY的其他细节 1.12 高级汇编语言与底级汇编语言比较 1.13 更多信息 第2章 数据表示 2.1 本章概述 2.2 数字系统 2.3 十六进制数字系统 2.4 数据结构 2.5 二进制数与十六进制数的算术运算 2.6 关于数字及其表示法 2.7 位逻辑运算 2.8 二进制数和位串的逻辑运算 2.9 有符号数和无符号数 2.10 符号扩展、零扩展、压缩和饱和 2.11 侈位和缩环移位 2.12 位域和压缩数据 2.13 浮点运算简介 2.14 BCD数据表示 2.15 字符 2.16 Unicode字符集 2.17 更多信息 第3章 存储器的访问与结构 3.1 本章概述 3.2 80x86的寻址方式 3.3 运行时存储器的结构 3.4 HLA如何为变量分配内存 3.5 HLA对数据对齐的支持 3.6 地址表达式 3.7 类型强制转换 3.8 寄存器类型强制转换 3.9 栈段与PUSH及POP指令 3.10 动态内存分配和堆段 3.11 INC和DEC指令 3.12 获取存储器对象的地址 3.13 更多信息 第4章 常量、变量与数据类型 4.1 本章概述 4.2 一些额外的指令:INTMUL、BOUND、INTO 4.3 TBYTE数据类型 4.4 HLA常量和数值声明 4.5 HLA和TYPE段 4.6 ENUM和HLA枚举数据类型 4.7 指针数据类型 4.8 HLA标准库CHARS.HHF模型 4.9 复合数据类型 4.10 字符串 4.11 HLA字符串 4.12 访问字符中的某个字符 4.13 HLA字符串模块和其他与字符串机关的例程 4.14 存储器内转换 4.15 字符集 4.16 在HLA中实现字符集 4.17 HLA字符集常量和字符集表达工 4.18 HLA HLL布尔表达式中的IN操作符 4.19 HLA标准库对字符集的支持 4.20 在HLA程序中使用字符集 4.21 数组 4.22 在HLA程序中声明数组 4.23 HLA数组常量 4.24 访问一维数组的元素 4.25 多维数组 4.26 多维数组的存储空间分配 4.27 汇编语言中多维数组元素的访问 4.28 大数组和MASM(只适用于Windows程序员) 4.29 记录 4.30 记录常量 4.31 记录数组 4.32 数组/记录作为记录字段 4.33 控制记录中的字面偏移量 4.34 对齐记录中的字段 4.35 记录指针 4.36 联合 4.37 匿名联合 4.38 变量类型 4.39 联合常量 4.40 命名空间 4.41 汇编语言中的动态数组 4.42 HLA标准库数组支持 4.43 更多信息 第5章 过程与单元 5.1 本章概述 5.2 过程 5.3 机器状态的保存 5.4 过程的提前返回 5.5 局部变量 5.6 其他局部和全局符号类型 5.7 参数 5.8 函数和函数的结果 5.9 递归 5.10 过程的向前引用 5.11 过程的底层实现与CALL指令 5.12 过程与堆栈 5.13 活动记录 5.14 标准入口序列 5.15 标准出口序列 5.16 自动(局部)变量的底层实现 5.17 参数的度层实现 5.18 过程指针 5.19 过程参数 5.20 无类型的引用参数 5.21 管理大型程序 5.22 #INCLUDE伪指令 5.23 忽略重复的#INCLUDE操作 5.24 单元与EXTERNAL伪指令 5.25 命名空间的污染 5.26 更多信息 第6章 算术运算 6.1 本章概述 6.2 80x86的整数运算指令 6.3 算术表达式 6.4 逻辑(布尔)表达式 6.5 机器特征与运算技巧 6.6 浮点运算 6.7 浮点表达式到汇编语言的转换 6.8 HLA标准库对浮点算术运算的支持 6.9 算术运算小结 第7章 低级控制结构 7.1 本章概述 7.2 低级控制结构 7.3 语句标号 7.4 无条件控制转移(JMP) 7.5 条件跳转指令 7.6 “中级”控制结构:JT和JF 7.7 使用汇编语言实现通用控制结构 7.8 选择 7.9 状态机和间接跳转 7.10 “面条式”代码 7.11 循环 7.12 性能提高 7.13 HLA中的混合控制结构 7.14 更多信息 第8章 文件 8.1 本章概述 8.2 文件组织 8.3 顺序文件 8.4 随机访问文件 8.5 ISAM文件 8.6 截断文件 8.7 更多信息 第9章 高级算术运算 9.1 本章概述 9.2 多精度操作 9.3 对不同长度的操作数进行操作 9.4 十进制算术运算 9.5 表 9.6 更多信息 第10章 宏与HLA编译时语言 10.1 本章概述 10.2 编译时语言 10.3 #PRINT和#ERROR语句 10.4 编译时常量和变量 10.5 编译时表达式和操作符 10.6 编译时函数 10.7 条件编译(编译时决定) 10.8 重复编译(编译时循环) 10.9 宏(编译时过程) 10.10 编写编译时“程序” 10.11 在不同的源文件中使用宏 10.12 更多信息 第11章 位操作 11.1 本章概述 11.2 位数据 11.3 位操作指令 11.4 作为位累加器的进位标志位 11.5 位串的压缩与解压缩 11.6 接合位组与分布位串 11.7 压缩的位串数组 11.8 搜索位 11.9 位的计数 11.10 倒置位串 11.11 合并位串 11.12 提取位串 11.13 搜索位模式 11.14 HLA标准库的位模块 11.15 更多信息 第12章 字符串指令 12.1 本章概述 12.2 80x86字符串指令 12.3 80x86字符串指令的性能 12.4 更多信息 第13章 MMX指令集 13.1 本章概述 13.2 判断CPU是否支持MMX指令集 13.3 MMX编程环境 13.4 设计MMX指令集的目的 13.5 饱和算未能和回转模式 13.6 MMX指令操作数 13.7 MMX技术指令 第14章 类与对象 14.1 本章概述 14.2 通用原则 14.3 HLA中的类 14.4 对象 14.5 继承 14.6 重载 14.7 虚拟方法与静态过程 14.8 编写类方法和过程 14.9 对象实现 14.10 构造函数和对象初始化 14.11 析构函数 14.12 HLA的“_initialize_”和“_finalize_”字符串 14.13 抽像方法 14.14 运行时类型信息(RTTI) 14.15 调用基类的方法 14.16 更多信息 第15章 混合语言编程 15.1 本章概述 15.2 在同一程序中混合使用HLA和MASM/Gas代码 15.3 使用Delphi/Kylix和HLA编程 15.4 使用C/C++和HLA编程 15.5 更多信息 附录A ASCII字符集 附录B 80x86指令集

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧