天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 7|回复: 0

ObjectARX递归AcArray数组组合函数

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    // 指定组合数量递归函数模板(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"));
            }

     

     

     

     

    ObjectARX递归AcArray数组组合函数
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:22 , Processed in 0.059295 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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