设为首页收藏本站

中国膜结构网

 找回密码
 立即注册
膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 18|回复: 0

ObjectARX递归AcArray数组组合函数

[复制链接]
  • TA的每日心情
    开心
    2021-3-7 10:01
  • 签到天数: 1440 天

    连续签到: 19 天

    [LV.10]以坛为家III

    发表于 2021-2-19 17:44 | 显示全部楼层 |阅读模式
    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构咨询服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系QQ:463017170.
    // 指定组合数量递归函数模板(1 2 3) n=1 => (1) (2) (3) n=2 => (1 2) (1 3) (2 3)
        template <class T>
        static AcArray<T> combination(T arr,int m)
        {
            AcArray<T> arrs;
            if (arr.length()>0 && m > 0)
            {
                T cdr=arr;
                cdr.removeFirst();            
                AcArray<T> tmparrs1=combination(cdr,m-1);
                if (tmparrs1.isEmpty() && m ==1)
                {
                    T tmp;
                    tmp.append(arr.first());
                    arrs.append(tmp);
                }
                else
                {
                    for (int i=0;i<tmparrs1.length();i++)
                    {               
                        tmparrs1.at(i).insertAt(0,arr.first());
                    }
                    arrs.append(tmparrs1);                    
                }
                AcArray<T> tmparrs2 = combination(cdr,m);
                if (!tmparrs2.isEmpty())
                {
                    arrs.append(tmparrs2);
                }                        
            }
            return arrs;
        }

        //全部组合函数模板(1 2 3) => (1) (2) (3) (1 2) (1 3) (2 3) (1 2 3)
        template <class T>
        static AcArray<T> combination(T arr)
        {   
            AcArray<T> arrs;        
            for (int i=1;i<=arr.length();i++)
            {
                //调用递归
                AcArray<T> tempArray =combination(arr,i);
                arrs.append(tempArray);            
            }
            return arrs;
        }




    //此处使用ARX自带的AcGeIntArray做示例
            AcGeIntArray a;
            //第一种方式,
            AcArray<AcGeIntArray> arrs;
            //第二种方式,使用typedef定义一个类型别名
            //typedef AcArray<AcGeIntArray> AcGeIntArrays;
            //AcGeIntArrays arrs;

            //初始化数组
            for (int i=0;i<3;i++)
            {
                a.append(i+1);
            }

            //调用组合函数        
            arrs=combination(a);        
            //输出组合结果
            acutPrintf(_T("\n组合结果\n"));
            for (int i=0;i<arrs.length();i++)
            {
                AcGeIntArray tmp=arrs.at(i);
                for (int j=0;j<tmp.length();j++)
                {
                    acutPrintf(_T("%d "),tmp.at(j));
                }
                acutPrintf(_T("\n"));
            }
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    推荐膜材品牌上一条 /5 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构协会

    QQ|申请友链|Archiver|手机版|中国膜结构论坛

    GMT+8, 2021-3-8 02:06 , Processed in 0.274681 second(s), 23 queries .

    Powered by 中国膜结构网->膜材采购->膜结构设计->膜结构安装->膜结构维修

    © 2014-2020 膜结构协会->进口膜材->国产膜材->PVDF膜材->PTFE膜材->ETFE膜材.

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