回复:一个随机排列的程序,大家帮看一下还能优化吗?(能否用FOR简化)

已锁定

为修修为

西门子1847工业学习平台

  • 帖子

    1155
  • 精华

    8
  • 被关注

    30

论坛等级:奇侠

注册时间:2021-12-02

钻石 钻石 如何晋级?

发布于 2023-12-04 20:57:24

16楼

展开查看
以下是引用xinchen在2023-12-04 11:20:38的发言 >14楼

iMax 和 iMin 限定的是本次生成的随机数范围,这个防呆没问题;

但要清楚的是 它是 [1,16] 的子集,分配总的数组时,不用受它影响;


比如 输入范围是 [8,14],那我内部还是用 [1, 16] 的数组去处理,这并不会有问题,毕竟输入范围是它的子集;


以下是引用为修修为在2023-12-04 09:35:34的发言 >8楼:21-40段是限幅及防止...

引用8楼详细内容:

21-40段是限幅及防止输入错误宕机,防止错误输入导致MIN值大于MAX值。这是一个1-16间整数随机排列 ,可以是1-2之间,也可以是2-3,以此类推1-16间。

以下是引用xinchen在2023-12-04 09:25:30的发言 >6楼:在不考虑重复值、范...

引用6楼详细内容:

在不考虑重复值、范围(上下限)确定,且范围很小时,是否重复和顺序输出的最快方法就是用数组,确实不用再冒泡之类的排序;


从程序上看, sMax/sMin 不需要受 iMax/iMin 影响吧(?,初始化就能定下了),此时 偏移量 x-sMin 就是定的,在 array[] 或者 SW[] 中的位置也是固定的;只需要生成随机数后,看看对应的位置是否有值即可;

另外,此时 array 中未生成过的位置值是0,如果想要去掉0,再循环一次 array,仅提取不为0的放在另一数组即可;


如果以上满足需求,那几行程序就行了,不需要后面的 各种 goto 和 #RandomVal <> #Array[1] && #RandomVal <> #Array[2] ... 




是的,能否用FOR简化呢。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15117条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。