ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 时间的音符

[分享] 出个题目.

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-28 20:52 | 显示全部楼层
WPS里的JSA练习一下,虽然算出来了,但是时长将近2分钟,一定还有很大的优化空间,空了再琢磨琢磨——


微信截图_20240928205031.png

TA的精华主题

TA的得分主题

发表于 2024-9-28 22:28 | 显示全部楼层
我连意思还没搞懂,好像是太难了,等待大老们结果。

TA的精华主题

TA的得分主题

发表于 2024-9-28 22:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
根据自己的想法写,能出结果的都对,但有一大半没出结果,总时间4秒多,继续排查。

TA的精华主题

TA的得分主题

发表于 2024-9-28 22:48 | 显示全部楼层
感觉真是闲得蛋疼,搞这么无聊的要累死电脑的题目,就如 姜萍 参加 阿里的数学大赛,那些鬼东西现实是 很难派上用场,有这时间 学习点新知识 它不香吗?

TA的精华主题

TA的得分主题

发表于 2024-9-28 23:10 | 显示全部楼层
  1. Option Explicit

  2. Private Function minerr(str As String, x As Long, y As Long) As Long
  3.   Dim i&, m1&, m&, s1&, s2&, k&
  4.   Dim arr() As Long
  5.   
  6.   m1 = 0
  7.   m = 0
  8.   i = 1
  9.   ReDim arr(0 To 20)
  10.   
  11.   Do While i <= Len(str)
  12.      
  13.     If Mid(str, i, 1) = "0" Then
  14.       For k = 0 To m
  15.         arr(k) = arr(k) + y * (m1 + k)
  16.       
  17.       Next
  18.     ElseIf Mid(str, i, 1) = "1" Then
  19.       For k = 0 To m
  20.          arr(k) = arr(k) + x * (i - (m1 + k) - 1)
  21.          
  22.       Next
  23.       m1 = m1 + 1
  24.      
  25.     Else
  26.       If m >= UBound(arr) Then ReDim Preserve arr(0 To UBound(arr) + 20)
  27.       arr(m + 1) = arr(m) + x * (i - (m1 + m) - 1)
  28.      
  29.       For k = m To 1 Step -1
  30.        s1 = arr(k) + y * (m1 + k)
  31.        s2 = arr(k - 1) + x * (i - (m1 + k - 1) - 1)
  32.        arr(k) = IIf(s1 < s2, s1, s2)
  33.       Next
  34.       
  35.        arr(0) = arr(0) + y * m1
  36.       
  37.       m = m + 1
  38.      
  39.     End If
  40.       i = i + 1
  41.   Loop
  42.     minerr = arr(0)
  43.     For k = 1 To m
  44.       If arr(k) < minerr Then
  45.         minerr = arr(k)
  46.       End If
  47.     Next
  48. End Function

  49. Private Sub CommandButton1_Click()
  50. Dim t As Double
  51. Dim i&, last&


  52. t = Timer()
  53. last = Range("A65536").End(xlUp).Row
  54. For i = 1 To last
  55.     Cells(i, 4) = minerr(Cells(i, 1), Val(Cells(i, 2)), Val(Cells(i, 3)))
  56. Next
  57. Cells(1, 5) = Timer() - t
  58. End Sub

复制代码

点评

点赞,对比我那辆老爷车,这是***的速度……  发表于 2024-9-29 09:20

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-29 05:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一招秒杀 发表于 2024-9-28 22:48
感觉真是闲得蛋疼,搞这么无聊的要累死电脑的题目,就如 姜萍 参加 阿里的数学大赛,那些鬼东西现实是 很难 ...

不累的呀,100题只不过几秒就完成图了。

TA的精华主题

TA的得分主题

发表于 2024-9-29 11:08 | 显示全部楼层
一招秒杀 发表于 2024-9-28 22:48
感觉真是闲得蛋疼,搞这么无聊的要累死电脑的题目,就如 姜萍 参加 阿里的数学大赛,那些鬼东西现实是 很难 ...

本贴能回复解答方法的都是大佬级别的,相当于他们在搞学术研究一样,应该是级别比较高的问题,比普通求助的问题难得多。
头像被屏蔽

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-29 12:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-9-29 13:43 | 显示全部楼层
数学渣渣,数学解法不会,语文解法来一波
  1. Sub test()
  2. Dim N&, I&, K&, J&, P&, Arr, Arrt$(1), S$, T$, Y$, A&, B&, C&, D&, E&, mTimer#
  3. mTimer = Timer
  4. With ThisWorkbook.ActiveSheet
  5.   Arr = .Range("a1:c" & .Cells(.Rows.Count, 1).End(3).Row).Value
  6.   For N = LBound(Arr) To UBound(Arr)
  7.     S = Arr(N, 1): A = Arr(N, 2): B = Arr(N, 3): P = 0
  8.     If A > B Then Arrt(0) = "1": Arrt(1) = "0" Else Arrt(0) = "0": Arrt(1) = "1"
  9.     J = countSS(Replace(S, "!", Arrt(0)), A, B)
  10.     K = countSS(Replace(S, "!", Arrt(1)), A, B)
  11.     If J > K Then
  12.       T = Replace(S, "!", Arrt(1)): Y = Arrt(0): C = 1: D = Len(S): E = 1
  13.     Else
  14.       T = Replace(S, "!", Arrt(0)): K = J: Y = Arrt(1): C = Len(S): D = 1: E = -1
  15.     End If
  16.     For I = C To D Step E
  17.       If Mid(S, I, 1) = "!" Then
  18.         Mid(T, I, 1) = Y: J = countSS(T, A, B)
  19.         If J <= K Then
  20.           K = J
  21.         'ElseIf J > K Then  '这个跳出条件有些情况下不对,如果能实现跳出会大幅提速
  22.         '  Exit For
  23.         End If
  24.       End If
  25.     Next I
  26.     Arr(N, 1) = K
  27.   Next N
  28.   .[d1].Resize(UBound(Arr)).Value = Arr
  29. End With
  30. Debug.Print Timer - mTimer
  31. End Sub

  32. Function countSS(T$, A&, B&)
  33. Dim C&, I&, D&, E&, F&, G&
  34. For I = 1 To Len(T)
  35.   If Mid(T, I, 1) = "1" Then
  36.     E = E + C: G = G + 1
  37.   Else
  38.     C = C + 1: F = F + G
  39.   End If
  40. Next I
  41. countSS = A * E + B * F
  42. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2024-9-29 14:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
突击百度“子序列”相关概念,目前囫囵吞枣,待消化ing!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 11:28 , Processed in 0.036896 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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