11

求助!穷举!

 4 years ago
source link: https://bbs.csdn.net/topics/399171146
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

求助!穷举!

VB > 资源 [问题点数:50分]

使用vb,命令按钮源码!

写好了,无结果的运行时间比较长,根据电脑配置情况可能要几个小时到几天,代码如下:
Visual Basic code?
Option Explicit
Private Sub cmdStartCombine_Click()
TextI = ""
TextJ = ""
TextK = ""
TextResult = ""
Dim As Long
a = TextA
Dim As Long
b = TextB
Dim As Long
c = TextC
Dim As Long
d = TextD
Dim As Long
For i = 0 To 10000
DoEvents
Dim As Long
For j = 0 To 10000
Dim As Long
For k = 0 To 10000
Dim temp As Long
temp = d * (a * i + b * j + c * k)
If 93 * i > temp And 930 * j > temp And 9000 * k > temp Then
TextI = i
TextJ = j
TextK = k
TextResult = "组合完成."
Exit Sub
End If
Next
Next
Next
TextResult = "没有这种组合!"
End Sub
下载地址:
链接:https://pan.baidu.com/s/1tivqdNAETJw0_bGJQgYZSw 
提取码:2f6p 

运行示例:
a、b、c的值域没有进行限定,
就有可能出现“几千万”甚至“几亿个”的符合要求的组合;
当然也可能出现“没有结果”的情况。


至于楼上说的“无结果的运行时间比较长”,
那是算法逻辑的问题。
其实当“没有结果”时,合理的算法是可以“立即完成”的。
(耗时“几乎为0”)

如果不换算法的话下面的代码比你写的快那么一点:
Private Sub cmdStartCombine_Click()
    Dim a As Long, b As Long, c As Long, d As Long, i As Long, j As Long, k As Long, temp As Long
    TextI = "": TextJ = "": TextK = "": TextResult = ""
    a = TextA: b = TextB: c = TextC: d = TextD
    For i = 0 To 10000
        For j = 0 To 10000
            For k = 0 To 10000
                temp = d * (a * i + b * j + c * k)
                If 93 * i > temp And 930 * j > temp And 9000 * k > temp Then TextI = i: TextJ = j: TextK = k: TextResult = "组合完成.": Exit Sub
            Next k
        Next j
        DoEvents
    Next i
    TextResult = "没有这种组合!"
End Sub

循环部分做改动,逐层进行判定,如果在i和j确定的情况下已经不满足判定条件,后面就没必要再继续计算了,从而对没有组合的情况大幅减少循环次数,提高判定速度。
我这biu的就出来了,你们试试。

此外,i,j,k我从1开始,从0 开始没意义,保证不符合判定,而且变成特例影响后续逻辑。
Visual Basic code?
Private Sub cmdStartCombine_Click()
TextI = ""
TextJ = ""
TextK = ""
TextResult = ""
Dim As Long
a = Val(TextA)
Dim As Long
b = Val(TextB)
Dim As Long
c = Val(TextC)
Dim As Long
d = Val(TextD)
Dim temp As Long
Dim As Long
Dim As Long
Dim As Long
Dim tmp_adi As Long
Dim tmp_bdj As Long
For i = 1 To 10000
'在这一层循环里,j和k 都是1,对判定条件2和3影响很小,暂不理会后面再算
'所以93*i<adi的话后面别算了,退出循环。而且等式左右i可以约掉
If 93 <= a * d Then Exit For '
'前面的过滤门槛过了,就为下一层做准备
tmp_adi = a * d * i
For j = 1 To 10000
DoEvents
'这一层,i是定值,adi是定值,上一层里算好了,k是1对判定条件3影响很小,暂不考虑,所以只要判定前两个不满足就别再进第三层了
tmp_bdj = b * d * j
temp = tmp_adi + tmp_bdj
If 93 * i < temp Or 930 * j < temp Then Exit For
For k = 1 To 10000
'到了这层就三个判定逐个来了,但是 adi和bdj是定值在上一层已经算好了,这下再算一下cdk就可以了
temp = tmp_adi + tmp_bdj + c * d * k
'任何一个判定不满足就退出这层
If 93 * i <= temp Or 930 * j <= temp Or 9000 * k <= temp Then Exit For
'层层把关都过了,那么就是你想要的
TextI = i
TextJ = j
TextK = k
TextResult = "组合完成."
Exit Sub
Next
Next
Next
TextResult = "没有这种组合!"
End Sub
楼上可能没搞清楚什么叫穷举,不过如果你有更好的算法可以贴出来;

为了计算剩余时间,我又修改了一下代码:
Visual Basic code?
Option Explicit
Private Sub cmdStartCombine_Click()
TextI = ""
TextJ = ""
TextK = ""
TextResult = ""
Dim As Long
a = TextA
Dim As Long
b = TextB
Dim As Long
c = TextC
Dim As Long
d = TextD
Dim datStartTime As Date
datStartTime = Now
Dim As Long
For i = 0 To 10000
DoEvents
Dim As Long
For j = 0 To 10000
Dim As Long
For k = 0 To 10000
Dim temp As Long
temp = d * (a * i + b * j + c * k)
If 93 * i > temp And 930 * j > temp And 9000 * k > temp Then
TextI = i
TextJ = j
TextK = k
TextResult = "组合完成."
Exit Sub
End If
Next
Next
Dim datNowTime As Date
datNowTime = Now
Dim lngSecondUsed As Long
lngSecondUsed = DateDiff("s", datStartTime, datNowTime)
Dim lngSecondTotal As Long
lngSecondTotal = lngSecondUsed * 10001 \ (i + 1)
Dim lngSecondRemain As Long
lngSecondRemain = lngSecondTotal - lngSecondUsed
Dim intHours As Integer
intHours = lngSecondRemain \ 3600
Dim intMinutes As Integer
intMinutes = lngSecondRemain \ 60 Mod 60
Dim intSeconds As Integer
intSeconds = lngSecondRemain Mod 60
TextResult = "剩余时间: " & intHours & ":" & intMinutes & ":" & intSeconds
Next
TextResult = "没有这种组合!"
End Sub
下载地址:
链接:https://pan.baidu.com/s/1nJ2qPQpAQU2X6AA8WkTIWg 
提取码:1p1t 

运行示例:

经过对比,我发现如果程序中有大量循环,编译出来的程序运行速度是IDE环境中程序运行速度的将近9倍;
所以,编译出来的程序只需要运行1个多小时就能全部遍历完了;

现在才发现已经盖了好多楼,汗;

另外分析了你的代码,其实你只是要满足条件的其中一个数据,而不是所有满足的数据,也不是最小的组合,这样的话可以从数学角度出发去处理这个程序

引用 5 楼 脆皮大雪糕 的回复:
用穷举法和你优化过的算法,使用下边的算例计算一遍,可以发现问题:
a=40,b=40,c=40,d=2;

匿名用户不能发表回复!

一道题“谁养鱼”的穷举解法。_weixin_33671935的博客

想到自己的脑子不够用,还是求助于计算机吧。所以用程序实现如下: usingSystem; usingSystem.Collections.Generic; usingSystem.Text; namespace FiveFive { /**/ /* 在一条街上,有5座房子,喷了5种颜色。

求助! - weixin_34146410的博客 - CSDN博客

题目是原题,网上有wp,跟着做了一遍题目文件:网管的求助.bin首先发现文件名是bin文件(并不知道是什么文件)file一下...可是编程的花样却是千变万化,无法穷举,可以用它做出无数个不同领域,不同业务,形形色色的产品,正因为这么灵活,.....

100分求助!MacOS文件密码问题 求助一个穷举的题目,从数组里选3个字符组合成所有情况 求助文档 - weixin_34219944的博客 - CSDN博客

求助文档 2016年09月12日 12:04:00 weixin_34219944 阅读数 2 这种效果是怎么实现的呢?'```vocabulary_nested_scroll.setOnScrollChangeListener(newNestedScrollView.OnScrollChangeListener() {...

高手求助_zjj1169842995的专栏

高手求助 零基础,初学者 我现在正在用VB做数据库,正面临一重要难题: 请问如何根据登陆界面的用户账号对数据库进行选择,在用户显示界面里显示选择出来的信息。即adodc空间里adcmdtext 里面的SQL代码如何编写。

向C编程高手和数学高手求助!(请随意转贴/回复)

向编程高手和数学高手求助!(请随意转贴/回复)向编程高手和数学高手求助!(此贴请随意转贴) 小弟在德国念书,教授出了一道加解密题目,关于“Vigenère-Cipher”问题,即维...(小弟问了同学,说可以用穷举法,如a

异或和,穷举所有数据

Description averyboy是一个非常男孩,这一天他...现在他正向你求助,你能帮助他吗?食堂阿姨所给的问题如下:荟园食堂现在推出了N(N <= 20)种营养套餐,每一种套餐包含两种食物,这两种食物各自包含有自己...

二十四点游戏python_[求助]关于二十四点游戏python_wei...

算法的设计不唯一,穷举法是最为基本的解法,分治法则会获得比较高一些的效率,请你仔细思考,设计出算法实现该问题并画出算法的流程图。 2)请为你的24点纸牌游戏开发出一个界面 例如: 提示: ...

搜索的策略(1)——盲目搜索_weixin_30800807的博客

从老鼠探索迷宫的行为可以看出,它使用的深度优先搜索,这是一种简单而暴力的穷举搜索,几乎没有任何神秘性可言——找到一条路就一直走下去,直到撞墙为止,然后回溯,继续探索,我们将这种搜索策略称为“盲目搜索”。

求助大神,一道java关于排列组合穷举问题。 黑客揭秘!骗子如何拿到你的卡号和密码

你接到莫名其妙的电话,电话那头的“银行客服”竟然能一字不错地说出你的银行卡号,还告诉你卡上被误扣了钱款。如果你跟随他的指导进行操作,银行卡上的钱最终会莫名其妙地被划走。 你收到了一封邮件,来自你刚刚...

一道题“谁养鱼”的穷举解法。

有一道题是这样的: 1、在一条街上,有5座房子,喷了5种颜色。 2、每个房里住着不同国籍的人 3、每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物 问题是:谁养鱼?  提示: 1、英国人住红色房子 2、瑞典人...

从ERP、MES到APS!

一、ERP改变中国 几年前,金蝶董事局主席徐少春撰写了《ERP改变中国》。的确,这本书出版之前的几年中,中国企业界开始认识并运用ERP(企业资源计划)提高企业的管理水平。一时间,ERP似乎成了企业管理的代名词。...

python处理千万级数据_python处理10亿级别数据求助

我的目的是想要穷举某种情况,最终得到一个大字典(键有约10亿个,每个键对应2个值).然后再把这个字典写进txt里面.具体是约10亿种数字组合,每个数字组合包含6个正整数(范围是37到80),它们...我的目的是想要穷举某种情况...

求助,急。关于主函数问题 二十四点游戏python_[求助]关于二十四点游戏python

该楼层疑似违规已被系统折叠隐藏此楼查看此楼24点纸牌游戏的开发24点是一种老少咸宜的游戏,它的具体玩法如下:给玩家4张牌,每张牌的面值在1~13之间,允许其中有数值相同的牌。采用加、减、乘、除四则运算,允许...

[求助]大数分解的快速方法 一句被五重密码保护的表白破译全记录!!!!有利于我破案

男主人公他向一个心仪的女生告白, 谁知道她给了一个摩斯密码给他,说解出来了才答应和他约会。... 郁闷之下,他只能求教于网友了。 <br />****-/*----/----*/****-/****-/*----/---**/*----/**...

深度强化学习综述论文 A Brief Survey of Deep Reinforcement Learning

A Brief Survey of Deep Reinforcement Learning 深度强化学习的简要概述 作者: Kai Arulkumaran, Marc Peter Deisenroth, Miles Brundage, Anil Anthony Bharath 文章目录摘要 Abstract1. 引言 Introduction2....

樊登《创业,从发心到执行》课程学习总结

1.引言:创始人性格因素 创业者最终能否取得成就,一个很重要的影响因素就是,你与父母的关系。很多创业者在创业的过程中,以承受痛苦为荣,终日被巨大的压力推动着前进。一个人永远都只会选择熟悉的路线,所以如果...

算法题求助,请写出解题步骤,用JAVA实现 软件测试实战(微软技术专家经验总结)--前两章(软件测试基础、缺陷报告)读书笔记

前言一方面,总结了测试专家的见解和方法,将其精华内容综述在本书之中,以帮助读者提高学习效率、快速地掌握综合性技能;另一方面,将经验和反思融入书稿,使它反映出在工作中使用的策略、方法和技巧。...

困扰已久的乱码问题终于得到解决,希望下次出现更多问题,解决问题的过程很愉快!!!...

关于jsp乱码问题的解决 2009-01-22 21:32 关于jsp乱码问题的解决。 1 最基本的乱码问题。 这个乱码问题是最简单的乱码问题。一般新会出现。就是页面编码不一致导致的乱码。...Eclipse会根据这个编码格

【转贴】百度贴吧成就一段姻缘!一句被五重密码保护的表白破译全记录

作者:熊猫的熊 原文http://hi.baidu.com/hugebear/blog/item/3854e36e67c4e7dd81cb4aed.html 男主人公他向一个心仪的女生告白, 谁知道她给了一个摩斯密码给他,说解出来了才... ...****-/*----/----*/****-...

搜索的策略(1)——盲目搜索

早在1952年,克劳德·香农就已经是电子信息界的传奇人物,但是对当时的普通大众来说,他仍然是个陌生人。不过在即将开始的会展后,他就人尽皆知了。  在会议展上,香农展示了一只木制的、带有铜须的玩具老鼠,这只...

Python如何实现Dataframe中一列中若干数字之和在另一列中相同金额的匹配?

没有穷举,类似是这样的效果... 关于第1个功能,我自己的思路如下: ``` for i in list(df['Cr']): if i == 0: continue if i in list(df['Dr']): df1 = df.iloc[np.flatnonzero(df['Dr'] == i)...

用Python解决数据结构与算法问题(二):算法分析

python学习之路 - 从入门到精通到大师 文章目录[python学习之路 - 从入门到精通到大师](https://blog.csdn.net/TeFuirnever/article/details/90017382)一、...穷举法3.4、解法4: 计数和比较四、列表五、字典六、总...

Burp Suite暴力破解实验(问题+解决方法汇总)

步骤: 1. 安装DVWA  1.1 将dvwa.zip文件解压并将文件名修改为dvwa,将文件拷贝到wamp安装目录下的www目录下。(安装地址)  1.2 访问http://localhost/dvwa-master,设置数据库用户名和密码(这里是访问...

C++求组合数

【问题】 组合问题 问题描述:找出从自然数1、2、... 、n中任取r个数的所有组合。例如n=5,r=3的所有组合为: 1,2,3 1,2,4  1,3,4  2,3,4  1,2,5  1,3,5  2,3,5  1,4,5  2,4,5  ...3,

关于C语言跨平台编码问题

求助,如题,现在的系统又多又杂乱,想问一下,应该从哪个角度来分析C语言跨平台问题? 例如,想要编一个跨平台的小程序A,适用于目前所有的操作系统,也适用于32位和64位。 1. 怎么判断当前的系统平台?比如说这样...

《勇哥极客逆向培训班》第一章锻造绝世神兵

原创:梦幻软件天堂 作者:心灵代码 《勇哥极客逆向培训班》 第一章锻造绝世神兵 前言:现在网上屈指可数的逆向学习教程不过四部而已,而楼主要做到打破这个神话, 第一章主要是开天眼系列,临战前的各种磨枪训练,...

第5-6课:关键路径算法

这部分内容包含 9 篇,前 7 篇通过 7 个不同的算法实例,介绍了几种常见的穷举方法,比如线性数字类问题的穷举方法、树形空间的穷举方法、棋盘类游戏的常用穷举方法以及复杂问题的多重穷举和组合穷举方法,重点介绍...

neo4j--Cypher查询调优与执行计划

1.查询调优 1.1查询如何执行 Cypher执行引擎会将每个Cypher查询都转为一个执行计划。在执行查询时,执行计划将告知Neo4j执行什么样的操作。 1.2查询性能分析 查看执行计划对查询进行分析时有两个Cypher语句可用...

Spring Boot 入门

Spring Boot 入门介绍,听完这些课程你可以了解到 Spring Boot 的优势,为什么需要使用 Spring Boot ,学会使用 Spring Boot 创建一个简单的 Hello World ,并写学会使用 Spring Boot 单元测试。 了解 Spring Boot 并掌握 Spring Boot 基础开发

数学建模30种算法大全

数学建模最常用的30种算法! 全国大学生数学建模竞赛创办于1992年,每年一届,已成为全国高校规模最大的基础性学科竞赛,也是世界上规模最大的数学建模竞赛。2018年,来自全国34个省/市/区(包括香港、澳门和台湾)及美国和新加坡的1449所院校/校区、42128个队(本科38573队、专科3555队)、超过12万名大学生报名参加本项竞赛。

相关热词 c# 字符串后六位 c#程序如何创建本地文本 c#和java比较 c# list 查找 c#打开窗体 c# 逻辑循环 c# 去数组中的数据库 c# 查找所有集成类 c#调用c++ 结构封装 c#两个类属性绑定

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK