技术宅的结界

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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 9433|回复: 1
收起左侧

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

[复制链接]

1041

主题

2328

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
217
威望
288 点
宅币
18062 个
贡献
36589 次
宅之契约
0 份
在线时间
1732 小时
注册时间
2014-1-26
发表于 2015-5-31 01:13:01 | 显示全部楼层 |阅读模式

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

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

x
12345678每个数字只能用一次填空()+()=7()+()=9()-()=1()-()=2
QQ图片20150531010734.jpg
就是这题。我用VB写了个程序,通过穷举法穷举出1,2,3,4,5,6,7,8这8个数字的所有的组合,然后一个个来试题目中的括号,来试出所有的答案。
[Visual Basic] 纯文本查看 复制代码
VERSION 5.00
Begin VB.Form frmMain 
   AutoRedraw      =   -1  'True
   BorderStyle     =   1  'Fixed Single
   Caption         =   "计算"
   ClientHeight    =   4200
   ClientLeft      =   45
   ClientTop       =   375
   ClientWidth     =   5175
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   280
   ScaleMode       =   3  'Pixel
   ScaleWidth      =   345
   StartUpPosition =   3  '窗口缺省
   Begin VB.ListBox lstVals 
      Height          =   4200
      Left            =   0
      TabIndex        =   0
      Top             =   0
      Width           =   5175
   End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'这里开始,是代码的正文。
Option Explicit

Private HaveResult As Boolean

'参数:级别,排列结果,可用数字
Sub 穷举算法(ByVal Level As Long, Nums() As Long, NumAvail() As Long)
Dim I&, NewNumAvail() As Long, J&
If Level Then
    For I = 0 To Level
        '选出当前数字
        Nums(Level) = NumAvail(I)
        
        '重新选出下一级可用数字
        ReDim NewNumAvail(Level - 1)
        For J = 0 To I - 1
            NewNumAvail(J) = NumAvail(J)
        Next
        For J = I + 1 To Level
            NewNumAvail(J - 1) = NumAvail(J)
        Next
        
        '进行下一级穷举
        穷举算法 Level - 1, Nums, NewNumAvail
        Erase NewNumAvail
    Next
Else
    '最后一级数字
    Nums(Level) = NumAvail(0)
    
    '已经穷举出数字了
    If Nums(0) - Nums(1) = 1 And _
       Nums(2) - Nums(3) = 2 And _
       Nums(4) + Nums(5) = 7 And _
       Nums(6) + Nums(7) = 9 Then '如果八个数字都满足条件
        
        '添加到列表框
        Dim Strn As String
        For I = 0 To UBound(Nums) - 1
            Strn = Strn & Nums(I) & ","
        Next
        Strn = Strn & Nums(I)
        lstVals.AddItem Strn
        HaveResult = True
        DoEvents
    End If
End If
End Sub

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

Show

Dim I&
For I = 0 To 7
    NumAvail(I) = I + 1
Next
穷举算法 7, Nums, NumAvail

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

SRC: 穷举法.7z (5.16 KB, 下载次数: 8)

35

主题

180

帖子

1776

积分

用户组: 管理员

UID
8
精华
1
威望
14 点
宅币
1539 个
贡献
24 次
宅之契约
0 份
在线时间
248 小时
注册时间
2014-1-27
发表于 2015-6-12 16:15:48 | 显示全部楼层
可以放到数学专栏去。

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2019-8-19 12:20 , Processed in 0.104010 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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