d127: 二、牧场面积(9)
更新時間:2016/12/20
內容:假定Z先生搜集的材料恰好可以修建长度为L米的围栏,需要用这些围栏围起一个矩形牧场,为方便丈量,要求矩形的长和宽都必须是整数,问题是如何规划矩形的长和宽,才能使围成的矩形牧场的面积最大?例如当L=14时,可以围起长为6、宽为1的牧场,也可以修长为4、宽为3的牧场,当然可能还有其他的方法,但第二种方案围出的面积最大,为12。
輸入說明:
输入档有多组数据。每行一个数L(保证L是偶数)。
輸出說明:
输出用这L米的围栏所能围起矩形牧场的最大面积S。
範例輸入:
14
範例輸出:
12
想一想,再看解答~
繁體中文版本:
內容:
假定Z先生蒐集的材料恰好可以修建長度為 L 公尺的圍欄,需要用這些圍欄圍起一個矩形牧場,為方便丈量,要求矩形的長和寬都必須是整數,問題是如何規劃矩形的長與寬,才能使圍成的矩形牧場的面積最大?例如當 L=14 時,可以圍起來為 6 、寬為 1 的牧場,也可以長為 4 、寬為 3 的牧場,當然可能還有其他的方法,但第二種方案圍出的面積最大,為 12。
輸入說明:
輸入檔有多組數據。每行一個數 L (保證 L 是偶數)。
輸出說明:
輸出用這 L 公尺的圍欄所能圍起矩形牧場的最大面積 S 。
範例輸入:
14
範例輸出:
12
我的解題想法:
由「算幾不等式」得知,當面積(a*b)最大的時候,就是 a=b 時。依照題目輸入說明確定輸入的 L 一定是偶數,並且在內容中確定矩形的長寬都一定是整數,所以如果 L 可以被4整除,那麼長寬都會相等;如果L不能被4整除,長會比寬多1。
寬 = L/4
長 = L/4 + (L/2)%2
程式碼:
#include <stdio.h> int main(void){ long long int L; while(scanf("%lld",&L)!=EOF){ printf("%lld\n",(L/4)*((L/4)+(L/2)%2)); } return 0; }程式碼解析:
#1: | 引入標準輸入/輸出串流。 |
#2: | 主程式開始,回傳引數int,沒有參數。 |
#3: | 因為題目並沒有限制數字大小,那麼我們宣告目前64位元中,可以使用最大的數字long long int。 宣告1個長長整數(long long int)變數「L」,範圍–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。 |
#4: | 題目的輸入方式是多組數據輸入,並不知道結束的長度為多少,所以使用while迴圈搭配scanf判斷資料是否結尾(EOF)。 從標準輸入讀取格式化數據,讀取1個長長整數(%lld),指定值給「L」,並判斷「不是結尾(!=EOF)」是否成立。 |
#5: | 將格式化數據顯示到標準輸出。輸出1個長長整數(%lld)「(L/4)*((L/4)+(L/2)%2)」。 |
#6: | while迴圈結束。 |
#7: | 主程式回傳整數「0」。 |
#8: | 主程式結束。 |