如下的计算,出来的方式是全排列的,我想要如相加和值为3 
会有012 120 021 等出现,现在我想如果三个数字都一样,只取其中一个 
如 012 120 021 只要其中一个for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    for (int k = 0; k < 10; k++)
                    {
                        //生成01-1000
                        if (i + j +k== tAddnum)
                        {                            Calcnum++;
                            addNum.Add(Calcnum.ToString()+":"+i.ToString() + "+" + j.ToString() + "+" + k.ToString());                        }
                    }
                }
            }

解决方案 »

  1.   


    for (int i = 0; i < 10; i++)
                {
                    for (int j = 0; j < i; j++)
                    {
                        for (int k = 0; k < j; k++)
                        {
                            //生成01-1000
                            if (i + j +k== tAddnum)
                            {                            Calcnum++;
                                addNum.Add(Calcnum.ToString()+":"+i.ToString() + "+" + j.ToString() + "+" + k.ToString());                        }
                        }
                    }
                }
      

  2.   

    有个笨方法
    用个字符串数组把3个数字全排列就是6个不同组合存起来
    就是长度为6的字符串数组存放6中不同组合
    然后遍历字符串数组,判断addNum里是否包含字符串数组的其中一个元素,没有就add进来
    希望有简单的方法
      

  3.   

    把i,j,k做下排序再相加,就可以用个hashtable之类的唯一键值对来判断是否重复了。
      

  4.   

    看这个高手些的去重通用方法扩展:http://www.cnblogs.com/ldp615/archive/2011/08/01/distinct-entension.html