【C#】 迴圈小練習_平分糖果(窮舉法)

窮舉法練習...

A、B、C君萬聖節去拿糖果,總共帶了21個袋子,回來以後發現, 有7個裝滿了糖、7個裝了半滿、7個是空袋。
想要三人平分,該怎麼平分呢??

從題目可以知道..
1.每人分到7袋,陣列的元素和是 7
2.每人可以分到總和3.5袋的糖果,陣列行:整袋+半袋 = 3.5袋
3.單一人滿袋最多有3袋。
4.每個人都會有半袋,所以半袋總和數量是奇數。
 

 static void Main(string[] args)
        {
            //窮舉法
            int[,] candy = new int[3, 3];
            Console.WriteLine("可能存在的分配方案!!");
            //m為第一個人分的糖的滿袋數

            for (int m = 1; m <= 3; m++)
            {
                candy[0, 0] = m;
                candy[0, 1] = (int)((3.5 - m) / 0.5);//計算半袋
                candy[0, 2] = 7 - candy[0, 1] - candy[0, 0]; //計算空袋

                //n為第二個人分的糖的滿袋數
                for (int n = 1; n <= 3; n++)
                {
                    if (n < m) continue;  //減少迴圈
                    candy[1, 0] = n;
                    candy[1, 1] = (int)((3.5 - n) / 0.5);//計算半袋
                    if (candy[1, 1] < 0) break;
                    candy[1, 2] = 7 - candy[1, 1] - candy[1, 0]; //計算空袋

                    //j為第三個人分的糖的滿袋數
                    for (int j = 1; j <= 3; j++)
                    {
                        if (j < n || j + n + m != 7) continue;
                        candy[2, 0] = j;
                        candy[2, 1] = (int)((3.5 - j) / 0.5);//計算半袋
                        if (candy[2, 1] < 0) break;
                        candy[2, 2] = 7 - candy[2, 1] - candy[2 ,0]; //計算空袋

                        //滿足結果,輸出資料
                        if (candy[2, 1] + candy[1, 1] + candy[0, 1] == 7 && candy[2, 0] + candy[1, 0] + candy[0, 0] == 7)
                        {
                            Console.WriteLine("          整袋數     半袋數     空袋數");
                            for (int i = 0; i < 3; i++)
                            {
                                 Console.WriteLine("{0} :        {1}          {2}          {3}  ",i, candy[i, 0],candy[i, 1],candy[i, 2]);
                            }

                            Console.WriteLine(" ------------------------------------------ ");
                            break;
                        }
                    }
                }
            }
            Console.ReadLine();
        }

 

水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。