2015年5月22日 星期五

d127:二、牧场面积(9)

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:主程式結束。