开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 312|回复: 15
收起左侧

[已解决] 易语言遍历数

 关闭 [复制链接]
结帖率:100% (69/69)
发表于 2025-2-25 04:28:17 | 显示全部楼层 |阅读模式   广东省清远市
20精币
举个例子  把40分成5份  但是5份只能 在1~10中的取        例如   正确:5+5+10+10+10  =40  [5-5-10-10-10]    1+9+10+10+10=40  [1-9-10-10-10]   5+7+9+9+10=40 [5-7-9-9-10]  

错误:5+7+5+11+12=40 [5-7-5-11-12]   这种不需要的 因为 不在1~10里

把所有正确的例子遍历出来   例如这种[5-7-9-9-10]

最好也可以 把 30分成4份这样的遍历的算法

最佳答案

查看完整内容

[e=0].版本 2 .支持库 spec .子程序 _按钮1_被单击 .局部变量 a, 整数型, , "5" .局部变量 i, 整数型 .计次循环首 (1000, ) 置随机数种子 () .计次循环首 (5, i) a = 取随机数 (5, 10) .计次循环尾 () a [5] = 40 - a [1] - a [2] - a [3] - a [4] 调试输出 (到文本 (a [1]) + “+” + 到文本 (a [2]) + “+” + 到文本 (a [3]) + “+” + 到文本 (a [4]) + “+” + 到文本 (a [5]) ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:93% (83/89)

签到天数: 15 天

发表于 2025-2-25 04:28:18 | 显示全部楼层   浙江省温州市
  
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
a整数型5
i整数型 
计次循环首 (1000, )
置随机数种子 ()
计次循环首 (5, i)
a [i]取随机数 (5, 10)
计次循环尾 ()
a [5] = 40 - a [1] - a [2] - a [3] - a [4]
调试输出 (到文本 (a [1])“+”到文本 (a [2])“+”到文本 (a [3])“+”到文本 (a [4])“+”到文本 (a [5])“=”到文本 (40))
延迟 (100)
计次循环尾 ()


i支持库列表   支持库注释   
spec特殊功能支持库


145.png


补充内容 (2025-2-25 07:21):
写错了,看下面
回复

使用道具 举报

结帖率:93% (83/89)

签到天数: 15 天

发表于 2025-2-25 07:20:23 | 显示全部楼层   浙江省温州市
  
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
a整数型5
i整数型 
计次循环首 (1000, )
置随机数种子 ()
计次循环首 (5, i)
a [i]取随机数 (5, 10)
计次循环尾 ()
a [5] = 40 - a [1] - a [2] - a [3] - a [4]
如果真 (a [5] ≤ 10)
调试输出 (到文本 (a [1])“+”到文本 (a [2])“+”到文本 (a [3])“+”到文本 (a [4])“+”到文本 (a [5])“=”到文本 (40))
延迟 (100)

计次循环尾 ()
刚才也错了,改下


i支持库列表   支持库注释   
spec特殊功能支持库


点评

遍历所有,可不能取随机数啊   福建省泉州市  发表于 2025-2-25 07:48
回复

使用道具 举报

结帖率:100% (6/6)

签到天数: 1 天

发表于 2025-2-25 07:35:39 | 显示全部楼层   广东省东莞市
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
组合数组文本型0
寻找组合 (5, 40, 组合数组)  ' 查找40分5份的组合
输出调试文本 (“40分5份:”)
调试输出 (组合数组)
清除数组 (组合数组)
寻找组合 (4, 30, 组合数组)  ' 查找30分4份的组合
输出调试文本 (“30分4份:”)
调试输出 (组合数组)
子程序名返回值类型公开备 注
寻找组合整数型 
参数名类 型参考可空数组备 注
份数整数型
目标值整数型
结果容器文本型
变量名类 型静态数组备 注
临时数组整数型0
清除数组 (结果容器)  ' 清空结果数组
初始化组合处理 (份数, 目标值, 临时数组, 结果容器)
返回 (取数组成员数 (结果容器))
子程序名返回值类型公开备 注
初始化组合处理  
参数名类 型参考可空数组备 注
n整数型
target整数型
当前组合整数型
结果容器文本型
回溯生成组合 (当前组合, 1, 0, n, target, 结果容器)
子程序名返回值类型公开备 注
回溯生成组合  
参数名类 型参考可空数组备 注
当前组合整数型
起始值整数型
当前和整数型
剩余份数整数型
总目标整数型
结果容器文本型
变量名类 型静态数组备 注
x整数型 
下限值整数型 
上限值整数型 
需要数值整数型 
临时组合整数型0
如果真 (剩余份数 = 0)
如果真 (当前和 = 总目标)
数组转文本 (当前组合, 结果容器)  ' 将有效组合存入结果
返回 ()

需要数值 = 总目标 - 当前和
下限值 = 取最大值A (起始值, 需要数值 - 10 (剩余份数 - 1))
上限值 = 取最小值A (10, 需要数值 ÷ 剩余份数)
如果真 (剩余份数 = 1)
如果真 (下限值 ≤ 需要数值 需要数值 ≤ 10)
加入成员 (临时组合, 当前组合)
加入成员 (临时组合, 需要数值)
回溯生成组合 (临时组合, 需要数值, 当前和 + 需要数值, 0, 总目标, 结果容器)
返回 ()

变量循环首 (下限值, 上限值, 1, x)
加入成员 (临时组合, 当前组合)
加入成员 (临时组合, x)
回溯生成组合 (临时组合, x, 当前和 + x, 剩余份数 - 1, 总目标, 结果容器)
清除数组 (临时组合)
变量循环尾 ()
子程序名返回值类型公开备 注
数组转文本  
参数名类 型参考可空数组备 注
数组整数型
结果文本型
变量名类 型静态数组备 注
文本文本型 
i整数型 
文本 = “[”
计次循环首 (取数组成员数 (数组), i)
文本 = 文本 + 到文本 (数组 [i])
如果真 (i ≠ 取数组成员数 (数组))
文本 = 文本 + “-”

计次循环尾 ()
文本 = 文本 + “]”
加入成员 (结果, 文本)
子程序名返回值类型公开备 注
取最大值A整数型 
参数名类 型参考可空数组备 注
a整数型
b整数型
返回 (选择 (a > b, a, b))
子程序名返回值类型公开备 注
取最小值A整数型 
参数名类 型参考可空数组备 注
a整数型
b整数型
返回 (选择 (a < b, a, b))


i支持库列表   支持库注释   
spec特殊功能支持库


可以任意份数和目标值
VX截图_20250225073432.png

点评

不需要加入成员 直接在生成的外面 重定义数组 改变指定成员的值 求和就可以了   贵州省毕节市  发表于 2025-2-25 14:47
回溯生成组合 里面用 变量循环首(最小,最大,1,计次)代码会更少   贵州省毕节市  发表于 2025-2-25 14:45
回复

使用道具 举报

签到天数: 15 天

发表于 2025-2-25 07:43:13 | 显示全部楼层   贵州省黔东南苗族侗族自治州
可以参考 棋P 牛牛计算
回复

使用道具 举报

结帖率:100% (6/6)

签到天数: 1 天

发表于 2025-2-25 08:55:48 | 显示全部楼层   广东省东莞市
xiguapihenpi 发表于 2025-2-25 07:35
[e=0].版本 2
.支持库 spec

下限值 = 取最大值A (起始值, 需要数值 - 10 × (剩余份数 - 1))
回复

使用道具 举报

签到天数: 5 天

发表于 2025-2-25 09:10:11 | 显示全部楼层   河北省张家口市
samll88 发表于 2025-2-25 07:13
[e=0].版本 2
.支持库 spec

这样还是不太完善,起码你第一组都取到15了,而且可能会漏

function getAllPossibleSplits(total, parts, min, max) {
const results = [];

// 边界条件校验
if (parts <= 0 || total <= 0 || min > max) return [];
if (parts * min > total || parts * max < total) return [];

// 回溯算法核心
function backtrack(current, remainingTotal, remainingParts) {
    if (remainingParts === 1) {
        if (remainingTotal >= min && remainingTotal <= max) {
            results.push([...current, remainingTotal]);
        }
        return;
    }

    // 计算当前数字的取值范围
    const start = Math.max(
        min,
        remainingTotal - (remainingParts - 1) * max
    );
    const end = Math.min(
        max,
        remainingTotal - (remainingParts - 1) * min
    );

    // 遍历所有可能值
    for (let value = start; value <= end; value++) {
        current.push(value);
        backtrack(current, remainingTotal - value, remainingParts - 1);
        current.pop();
    }
}

backtrack([], total, parts);
return results;

}

// 示例用法
console.log(getAllPossibleSplits(10, 2, 3, 10));
/ 输出:
[
[3,7], [4,6], [5,5],
[6,4], [7,3]
]
/

console.log(getAllPossibleSplits(10, 3, 3, 10));
/ 输出:
[
[3,3,4], [3,4,3],
[4,3,3]
]
/

console.log(getAllPossibleSplits(20, 5, 3, 9));
/ 输出(部分示例):
[
[3,3,3,3,8], [3,3,3,4,7],
[3,3,3,5,6], ..., [9,9,1,1,0](无效项会被自动过滤)
]
/

回复

使用道具 举报

结帖率:100% (9/9)

签到天数: 15 天

发表于 2025-2-25 09:36:43 | 显示全部楼层   江苏省无锡市
见你上一贴:易语言计算问题_精易论坛

求随机数.e

7.55 KB, 下载次数: 1

回复

使用道具 举报

结帖率:93% (83/89)

签到天数: 15 天

发表于 2025-2-25 09:55:42 | 显示全部楼层   浙江省温州市
萧楚楠 发表于 2025-2-25 09:10
这样还是不太完善,起码你第一组都取到15了,而且可能会漏

[md]function getAllPossibleSplits(total, p ...



  
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
数字5整数型 
a整数型 
b整数型 
c整数型 
d整数型 
计次整数型 
计次循环首 (10, a)
计次循环首 (10, b)
计次循环首 (10, c)
计次循环首 (10, d)
数字5 = 40 - a - b - c - d
如果真 (数字5 ≤ 10)
调试输出 (到文本 (a)“+”到文本 (b)“+”到文本 (c)“+”到文本 (d)“+”到文本 (数字5)“=”到文本 (40))
计次 = 计次 + 1
调试输出 (“总数:”, 计次)

计次循环尾 ()
计次循环尾 ()
计次循环尾 ()
计次循环尾 ()


i支持库列表   支持库注释   
spec特殊功能支持库

打开.png
刚才随便写的,其实容易
回复

使用道具 举报

结帖率:93% (83/89)

签到天数: 15 天

发表于 2025-2-25 10:00:00 | 显示全部楼层   浙江省温州市
  
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
数字5整数型 
a整数型 
b整数型 
c整数型 
d整数型 
计次整数型 
计次循环首 (10, a)
计次循环首 (10, b)
计次循环首 (10, c)
计次循环首 (10, d)
数字5 = 40 - a - b - c - d
如果真 (数字5 ≤ 10 数字5 ≠ 0)
调试输出 (到文本 (a)“+”到文本 (b)“+”到文本 (c)“+”到文本 (d)“+”到文本 (数字5)“=”到文本 (40))
计次 = 计次 + 1

计次循环尾 ()
计次循环尾 ()
计次循环尾 ()
计次循环尾 ()
调试输出 (“总数:”, 计次)
修正一下0


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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