題目需求:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?
第一種算法(也是最消耗時間的,靠窮舉進行求出):這種方法可以進行一些優化知道兩個雞的數量后,第三種也就知道了
public static void Hundred_Money() { for (int i = 0; i <= 100; i++) { for (int j = 0; j <= 100; j++) { for (int z = 0; z <= 100; z++) { if (i*5+j*3+z/3.0f==100&&i+j+z==100) { Console.Write ("公雞數目有:{0},母雞數目有:{1},小雞數目有:{2}",i,j,z); Console.WriteLine (); } } } } }
第二種算法:(利用數學公式進行推導)
public void Hundred_Money1() { //公雞的數量 int cockCount = 0; //母雞的數量 float henCount=0; //小雞的數量 float smallCount=0; for (cockCount = 0; cockCount < 100; cockCount++) { henCount = 25 - 7f / 4f * cockCount; smallCount = 75 + 3f / 4f * cockCount; if (henCount>0&&smallCount>0) { if (((int)henCount==henCount)&&((int)smallCount==smallCount)) { Console.WriteLine ("公雞數目有:{0},母雞數目有:{1},小雞數目有:{2}",cockCount,henCount,smallCount); } } } }
第三種算法(利用遞歸的方式進行計算):
class MainClass { public static void Main(string[] args) { MethodClass method = new MethodClass (); int[] priceArray={15,9,1}; int[] resultArray={0,0,0}; method.Hundred_Money2(priceArray,resultArray,300,0); } } class MethodClass { public void Hundred_Money2(int[] priceArray,int[] resultArray,int remain_money,int index) { int time=remain_money/priceArray[index]; for(int i=0;i<=time;i++) { resultArray[index]=i; if(index==2) { if(resultArray[0]+resultArray[1]+resultArray[2]==100&&resultArray[0]>=0&&resultArray[1]>=0&&resultArray[2]>=0) if(resultArray[0]*priceArray[0]+resultArray[1]*priceArray[1]+resultArray[2]*priceArray[2]==300) Console.WriteLine ("公雞有:"+resultArray[0]+",母雞有:"+resultArray[1]+",小雞有:"+resultArray[2]); } else { int remainMoney=remain_money; remainMoney=remainMoney-priceArray[index]*resultArray[index]; Hundred_Money2(priceArray,resultArray,remainMoney,index+1); } } } }
以上三種就是百錢買百雞的三種算法!!!!!