2010年12月6日 星期一

2010列印機

1


2








橫行來看 公式為 n+2



n代表了要印的"空格"或"底線"的數量,+2則為兩側的紅色的空格

每個數字都是用這種格式的

所以利用

for ( int i = 0; i < int.Parse(input); i++)
{
space += " ";
baseLine += "_";
}












就算繼續增大2010得尺寸變成3












部件的數量永遠都是n-1,所以當n=1時就沒有部件了

使用

for ( int i = 0 ; i < n-1 ; i++)
Console.WriteLine(" " + space + "|" + "|" + space + "|" + " " + space + "|" + "|" + space + "|");
//此為部件1的搭配

有幾個部件就印幾次部件

依照
Console.WriteLine(頂端 )
Console.WriteLine(部件 1) (用for印n-1次)
Console.WriteLine(中間 )
Console.WriteLine(部件2 ) (用for印n-1次)
Console.WriteLine(底端)

這樣就能用短短的程式,印出2010了!!

咖啡促銷


買二杯中美式咖啡,可以有一杯免費小美式咖啡。
買二杯大美式咖啡,可以有一杯免費中美式咖啡。
買二杯中拿鐵,可以有一杯免費小拿鐵或小美式咖啡,以小拿鐵優先免費。
買二杯大拿鐵,可以有一杯免費中拿鐵或中美式咖啡,以中拿鐵優先免費。


根據上面的條件來看,可以得知大美式與大拿鐵的數量不會改變
會改變的是中拿鐵、小拿鐵、中美式、小美式,所以我們只要從此下手
美式咖啡 比較複雜 他需要考量到自己的優待數量以及拿鐵是否會有剩餘的優待

以中美式來說,它的可優待數量為


int free = American_L / 2;
if (Latte_L / 2 - Latte_N > 0)
{
free += Latte_L / 2 - Latte_N;
}


American_L / 2 為自己大美式的可優待數量
Latte_L / 2 - Latte_N > 0 如果大拿鐵的優待數量 - 中拿鐵的數量還有剩餘的話
free就加上大拿鐵剩餘的優待數量
再用中美式的數量去扣除掉可優待的數量,但也要注意中美式的數量夠不夠優待喔!!
不然會變成負數產生錯誤喔,小美式跟中美式的處理方式是相同的

再來處理中拿鐵

中拿鐵的數量 = 中拿鐵 - 大拿鐵/2 (即是可優待的數量)

if (Latte_N - (Latte_L / 2) > 0)
{
Latte_N = Latte_N - (Latte_L / 2);
}
else
Latte_N = 0;


這樣就大功告成了,小拿鐵也是依此類推

這道題目就這樣就能寫完了

還有一點很重要,就是"處理的順序"

用這種解法必須從中美→中拿

舉個例來看看

6 2 1 0 2 1

6 0 1 0 1 1(結果)

如果先從拿鐵先扣除 會變成 6 0 1 0 2 1 (美式的還沒計算到)

處理美式的時候會發現 Latte_L / 2 - Latte_N

此時的拿鐵中的數量被改變了

所以會出錯 變成 6 0 1 0 0 1

所以要在拿鐵改變前先算出 拿鐵"多餘"的優待數量

跟題目要求的以拿鐵優先免費並不相衝

還是以拿鐵先免費掉,多餘的再去免費掉美式

當然用其他種寫法也可以從拿鐵先下手