当前位置: 高中信息技术 / 综合题
  • 1. (2020高三上·诸暨月考) 给定n个不同的正整数(小于等于100),将它们分组,使得每组中任意两个数互质(它们的公约数为1)。按照以下算法对n个数进行分组:

    n个正整数由文本框Text1输入,依次存储到a数组中,b(1 to 25)中存储100内的素数,c数组存储每一组的数字个数及对应数字,d数组存储每一组内所含的质因子,相同质因子只存储一次,最后分组情况显示在列表框List1中。

    c数组初始状态:

    组别

    第一组

    第二组

    位置

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    d数组初始状态:

    组别

    第一组

    第二组

    位置

    1

    2

    3

    4

    5

    6

    25

    26

    27

    28

    29

    30

    50

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    若第一个数据为70,确定分组的过程为:先查找第一组内所含的质因子中是否含有70的质因子,未找到,则c数组中表示第一组数据个数的值加1,并将70添加到c数组的第一组内,同时在d数组第一组中依次添加70所含的各个质因子。

    c数组变化情况:

    组别

    第一组

    第二组

    位置

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    1

    70

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    d数组变化情况:

    组别

    第一组

    第二组

    位置

    1

    2

    3

    4

    5

    6

    25

    26

    27

    28

    29

    30

    50

    2

    5

    7

    0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    尝试将第2~n个整数分组。在确定某数分组的过程中,若已有的组内不存在该数所含的质因子,则将其分到第一个符合条件的组;否则,将其分到新生成的组中。

    分组完毕后数组存储情况如下表。

    c数组:

    组别

    第一组

    第二组

    位置

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    2

    70

    99

    0

    0

    0

    0

    3

    25

    54

    11

    0

    0

    0

    d数组:

    组别

    第一组

    第二组

    位置

    1

    2

    3

    4

    5

    6

    25

    26

    27

    28

    29

    30

    50

    2

    5

    7

    3

    11

    0

    0

    5

    2

    3

    11

    0

    0

    按照上述要求编写一个VB程序,其运行界面如图所示。

    1. (1) 按照上述算法,若有“35、40、26、18、63、77 ”6个整数,至少分成组(填具体数字)。
    2. (2) 请在划线处填入合适的代码。

      Const n = 6          '数据个数

      Dim a(1 To n) As Integer     '存储原始数据

      Dim b(1 To 25) As Integer    '存储100以内的素数

      Dim c(0 To (n + 1) * n) As Integer   '存储每一组的数字个数及对应数字

      Dim d(1 To 25 * n) As Integer        'd数组存储每一组内含有的质因子

      Private Sub Command1_Click()

          Dim t As Integer, i As Integer, j As Integer

          Dim k As Integer, m As Integer, p As Integer

          Dim y As Integer, zu As Integer

          Dim st As String

          For t = 1 To n

              k = 1

              i = 1

              Do While d((k - 1) * 25 + i) <> 0

                  If a(t) Mod d((k - 1) * 25 + i) = 0 Then

                      

                      i = 0

                  End If

                  i = i + 1

              Loop

              m = (k - 1) * (n + 1)  '每一组存储数字个数的所在位置

              c(m) = c(m) + 1

              

              For j = 1 To 25

                  If a(t) Mod b(j) = 0 Then

                      

                      i = i + 1

                  End If

              Next j

          Next t

          p = 0

          Do While c(p) > 0

              st = ""

              For i = 1 To c(p)

                  st = st + Str(c(p + i))

              Next i

              zu = p \ (n + 1) + 1

              List1.AddItem "第" + CStr(zu) + "组为:" + st

              'Cstr的功能:将数值型转为字符串型

              p = p + n + 1

              y = y + 1

          Loop

          List1.AddItem "至少分:" + CStr(y) + "组"

      End Sub

      Private Sub Form_Load()

      '读取文本框Text1中的各个数据依次存储到数组a中,存储100以内的素数到数组b中,代码略

      End Sub

微信扫码预览、分享更方便