回复:1到6无序写到6个格中,程序判断正确性。

xinchen

  • 帖子

    230
  • 精华

    1
  • 被关注

    5

论坛等级:侠圣

注册时间:2015-11-05

白金 白金 如何晋级?

发布于 2025-05-23 10:33:00

15楼

展开查看
以下是引用xinchen在2025-05-23 10:00:22的发言 >14楼


// data: Array of Int,6格 就是 0..5

#uData := DINT_TO_INT(IN:= UPPER_BOUND(ARR := #data, DIM := 1));


// buf: Array of Int,填的数字 1~6 就是 0..5

#uBuf := DINT_TO_INT(IN := UPPER_BOUND(ARR := #buf, DIM := 1));


// init

FOR #i := 0 TO #uBuf DO

    #buf[#i] := 0;

END_FOR;

#ret := FALSE;


// data -> buf

FOR #i := 0 TO #uData DO

    #index := #data[#i];

    IF #index = 0 THEN

        CONTINUE; // 未填写

    END_IF;

    

    #index := #index - 1;

    IF #index > #uBuf THEN

        RETURN; // 无效数据

    END_IF;

    

    IF #buf[#index] = 0 THEN

        #buf[#index] := #i + 1;

    ELSE

        RETURN; // 重复

    END_IF;

END_FOR;


// 小数未用 但 大数已用

FOR #i := 0 TO #uBuf - 1 DO

    IF #buf[#i] = 0 AND #buf[#i + 1] > 0 THEN

        RETURN;

    END_IF;

    ;

END_FOR;


#ret := TRUE;



============


用空间换时间,空间主要看所填的数字的范围,因为要看是否重复,因此范围不会大


如果要求是可以重复 n 次,可以扩展 buf 的定义,改成二维数组,内部记录已重复的次数+每次所在的位置

上述程序稍改即可




如果只看有没有重复,buf 定义为 bool 数组 即可

如果只看重复次数是否满足要求, buf 定义为 一维数组 记录次数即可

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有8945条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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