你这是项目,还是家庭作业,怎么那么奇葩呢
为什么ABC不是一次性给出数量,而是分成那么多行
而如果调整成5:2:3之后,也要跟原来一样分那么多份么?

解决方案 »

  1.   

    只调整A,B,C其他的不要动...
    且问题一点也不奇葩.
      

  2.   

    算比率好算,都加起来,乘上系数,就是每一种的数量了
    问题是,
    A 1
    A 2
    如果最终确定A应该买4个,那按什么规律将4个再分成2组?是平均分,还是按比例分?
      

  3.   

    这话我就听不懂了.还有其他?我只看到很多个ABC,没看到有其他
    而只调整ABC,A和B都有好多个,到底调整全部,还是调整哪个?
      

  4.   

    A         1
    A          2
    B          3
    C         4
    B          5
    B           6   通过算法(现在的问题)得出结果:A         1
    A          2
    A          3
    C         4
    A          5
    B           6   
      

  5.   

    物料这列的数据可以清掉,然后从(A,B,C)任选一种,输出的结果:A:B:C的购买数量无限接近50%:30%:20%就可以了.
      

  6.   

    好吧,就谈谈需求吧。客户需要生产一批成品物料,通过需求计划及BOM分解出需要购买以下这样的一些物料:x   1
    x    2
    x    3
    x    4
    x    5
    x    6其中x表示替代物料组的意思。x替代物料组中包括A,B,C三种具体的物料。
    也就是说x用A或B或C来替代都可以。但考虑A,B,C的成本及其他因素,购买A,B,C要按照一定的比例购买。
    即我上面提供的50%:30%:20%来购买。算法执行后提供出一款具体最佳的方案给用户。
    如:
    A  1
    A   2 
    A   3
    B   4
    B   5 
    C   6方案的实际比率为6/21:9/21:6:21 符合无限接近 50%: 30%:20% 
    注:可以看出,以上方案不是最佳方案。不想谈需求的原因是:需求我已经进行过分析了,现在已经具体到算法了。
      

  7.   

    如lz测试例子 总共21个物品可被替换 现在 a b c 要 50% 30% 20%
    那直接 21*0.5=10.5 四舍五入 11 A就11个然后 (21-11)*0.6=6 B 就6个
    最后  C等于4个
    按这顺序计算一下就好了 需要什么复杂的算法吗?你是需求是要11个A 6个B 4个C 在具体分成
    a: 1
    a:2
    a:3
    a:5
    b:6
    c:4
    这样?
      

  8.   

    所以说,需求你还没分析明白.所以方案也出不来.或者你心里知道,但是不会说.x后面的数量是固定的,不可更改,而且行数也是固定的,不可更改,仅仅是将x替换成abc?
    判断是否最佳方案的标准又是什么?
      

  9.   

    to laiyongxin :
    对,就是要得出这样一个结果.具体的代码如何实现,需要动态算,
      

  10.   


    x后面的数量是固定的,不可更改,而且行数也是固定的,不可更改,仅仅是将x替换成abc?
    回答 :对.判断是否最佳方案的标准又是什么? 
    回答: 这个目前还没定,暂时考虑计算出实际方案的比率.和希望的比率进行比较,选择偏差值接近0的.
      

  11.   

    简单啊,递归,有多少行就递归多少次
    然后每一次里面做个for循环,将当前行分别赋值成A,B,C
    最终递归完一次,就输出个结果
    然后算一下比率,记住再出一个结果,和上一次的比较,更优就替换,否则丢弃
    全部递归完,将最优解输出
      

  12.   


    class Program
        {
            string[] re = new string[6];
            static void Main(string[] args)
            {
                Program aa = new Program();
                aa.GetMethod("A", 0);
                aa.GetMethod("B", 0);
                aa.GetMethod("C", 0);
                Console.ReadLine();
            }
            public void GetMethod(string A,int n)
            {
                if (n == 6)
                {
                    Output(re);
                    return;
                }
                re[n] = A;
                GetMethod("A", n + 1);
                GetMethod("B", n + 1);
                GetMethod("C", n + 1);
            }
            public static void Output(string[] re)
            {
                for (int i = 0; i < re.Length; i++)
                {
                    Console.Write(re[i] + " ");
                }
                Console.WriteLine();
            }
        }
    看着个行不,……  
      

  13.   

            int rowsCount = 6;
            string[] resultList = new string[rowsCount];        void getValue(int step, int maxStep)
            {
                string strValue = "";
                for (int i = 0; i < 3; i++)
                {
                    switch (step)
                    {
                        case 0:
                            strValue = "A";
                            break;
                        case 1:
                            strValue = "B";
                            break;
                        case 2:
                            strValue = "C";
                            break;
                    }                resultList[step] = strValue;                if (step < maxStep)
                    {
                        getValue(step + 1, maxStep);
                    }
                    else
                    {
                        foreach (string s in resultList)
                        {
                            Console.WriteLine(s);
                        }
                    }
                }
            }
      

  14.   

    如果需要执行比较并保存结果,写到上面的else里就行了