窮舉法練習...
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();
}
水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。