找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 12816|回复: 3

12345678每个数字只能用一次填空……用VB解这题!

[复制链接]
发表于 2015-5-31 01:13:01 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
12345678每个数字只能用一次填空()+()=7()+()=9()-()=1()-()=2
QQ图片20150531010734.jpg
就是这题。我用VB写了个程序,通过穷举法穷举出1,2,3,4,5,6,7,8这8个数字的所有的组合,然后一个个来试题目中的括号,来试出所有的答案。
  1. VERSION 5.00
  2. Begin VB.Form frmMain
  3.    AutoRedraw      =   -1  'True
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "计算"
  6.    ClientHeight    =   4200
  7.    ClientLeft      =   45
  8.    ClientTop       =   375
  9.    ClientWidth     =   5175
  10.    LinkTopic       =   "Form1"
  11.    MaxButton       =   0   'False
  12.    MinButton       =   0   'False
  13.    ScaleHeight     =   280
  14.    ScaleMode       =   3  'Pixel
  15.    ScaleWidth      =   345
  16.    StartUpPosition =   3  '窗口缺省
  17.    Begin VB.ListBox lstVals
  18.       Height          =   4200
  19.       Left            =   0
  20.       TabIndex        =   0
  21.       Top             =   0
  22.       Width           =   5175
  23.    End
  24. End
  25. Attribute VB_Name = "frmMain"
  26. Attribute VB_GlobalNameSpace = False
  27. Attribute VB_Creatable = False
  28. Attribute VB_PredeclaredId = True
  29. Attribute VB_Exposed = False
  30. '这里开始,是代码的正文。
  31. Option Explicit

  32. Private HaveResult As Boolean

  33. '参数:级别,排列结果,可用数字
  34. Sub 穷举算法(ByVal Level As Long, Nums() As Long, NumAvail() As Long)
  35. Dim I&, NewNumAvail() As Long, J&
  36. If Level Then
  37.     For I = 0 To Level
  38.         '选出当前数字
  39.         Nums(Level) = NumAvail(I)
  40.         
  41.         '重新选出下一级可用数字
  42.         ReDim NewNumAvail(Level - 1)
  43.         For J = 0 To I - 1
  44.             NewNumAvail(J) = NumAvail(J)
  45.         Next
  46.         For J = I + 1 To Level
  47.             NewNumAvail(J - 1) = NumAvail(J)
  48.         Next
  49.         
  50.         '进行下一级穷举
  51.         穷举算法 Level - 1, Nums, NewNumAvail
  52.         Erase NewNumAvail
  53.     Next
  54. Else
  55.     '最后一级数字
  56.     Nums(Level) = NumAvail(0)
  57.    
  58.     '已经穷举出数字了
  59.     If Nums(0) - Nums(1) = 1 And _
  60.        Nums(2) - Nums(3) = 2 And _
  61.        Nums(4) + Nums(5) = 7 And _
  62.        Nums(6) + Nums(7) = 9 Then '如果八个数字都满足条件
  63.         
  64.         '添加到列表框
  65.         Dim Strn As String
  66.         For I = 0 To UBound(Nums) - 1
  67.             Strn = Strn & Nums(I) & ","
  68.         Next
  69.         Strn = Strn & Nums(I)
  70.         lstVals.AddItem Strn
  71.         HaveResult = True
  72.         DoEvents
  73.     End If
  74. End If
  75. End Sub

  76. Private Sub Form_Load()
  77. Dim Nums(7) As Long, NumAvail(7) As Long

  78. Show

  79. Dim I&
  80. For I = 0 To 7
  81.     NumAvail(I) = I + 1
  82. Next
  83. 穷举算法 7, Nums, NumAvail

  84. If HaveResult Then MsgBox "已经计算完成。", vbInformation Else MsgBox "已经计算完成,无解。", vbExclamation
  85. End Sub
复制代码
结果是无解。
20150531011118.png

SRC: 穷举法.7z (5.16 KB, 下载次数: 8)
BIN: 穷举法.exe (20 KB, 下载次数: 1)
回复

使用道具 举报

发表于 2015-6-12 16:15:48 | 显示全部楼层
可以放到数学专栏去。
回复 赞! 靠!

使用道具 举报

发表于 2020-5-26 23:53:50 | 显示全部楼层
哈哈哈哈哈哈哈,最后我直接笑爆哈哈哈哈哈哈
回复 赞! 靠!

使用道具 举报

发表于 2020-7-28 07:45:12 | 显示全部楼层
一看就是无解的,()+()=2,填不了
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-21 18:13 , Processed in 0.037558 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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