問題描述
「低利航空公司」因與同業競爭,經常給予預購票大幅折扣。近年來因為油價高漲,經過細算,該公司所飛行的航班必須以票面價售出 30% 的機位才能打平所有的支出,因此該公司必須減少每張票的折扣數或者提高票面單價,來提昇公司獲利水準。但是全面提高票價可能會造成客源的流失,因此企畫部門提出了以下的動態調整機位售價的模式:
給定某航段的票面價及機位數,前 20% 賣出的機位售價為票面價之 70%,前 21% ~ 40% 賣出的機位售價為票面價之 80%,前 41% ~ 60% 賣出的機位售價為票面價之 90%,最後售出的機位則全部為票面價。
請寫一個程式來幫助「低利航空公司」計算每天每班飛航班機的利潤或虧損。計算過程皆四捨五入至整數。
輸入格式(標準輸入)
每個測試資料有一行數字,數字之間以空白隔開。第一個整數代表該航班的票面價 s, s ≦ 5,000,第二個整數代表機位數 t, t ≦ 250,第三個整數 n, 0 ≦ n ≦ 10 代表該航班共有 n 個訂位記錄,後面則有 n 個整數,分別代表每個訂位的機位數。當然,所訂的機位總數不會超過 t。
輸出格式(標準輸出)
請輸出飛航該班機的利潤或虧損金額。
輸入範例
4 5
0 0 1 1 0
0 1 1 1 1
0 1 1 1 1
0 0 1 0 0
輸出範例
8
解題思考
首先,我們先根據總人數(由各筆訂位紀錄的人數總和)與機位數,計算出訂位數所佔總機位數的百分比。
接著只要按照題意,「前多少百分比的機票打多少折」再扣掉成本(票面價乘上總機位數的30%),就可以了。
這題本身不難。只要能夠正確的列出算式,應該就能很輕易的靠程式實現。
參考解答(C)
#include <stdio.h> #include <stdlib.h> int main(void) { int n, i, m; float s, t, man = 0, per; printf("請依序輸入票價 機位 訂位次數 訂位人數:\n"); scanf("%f%f%d", &s, &t, &n); for(i = 0; i < n; i++) { scanf("%d", &m); man += m; } per = man / t; if (per <= 0.2) { s *= man * 0.7 - t * 0.30; } else if (per <= 0.4) { s *= man * 0.8 - t * 0.32; } else if (per <= 0.6) { s *= man * 0.9 - t * 0.36; } else { s *= man - t * 0.42; } printf("利潤計算結果:%.0f 元\n", s); system("pause"); }
參考解答(Ruby)
line = $stdin.gets.split() s = line[0].to_i t = line[1].to_i n = line[2].to_i p = 0 n.times{|i| p += line[i + 3].to_i } per = Rational(p, t) if per <= 0.20 s *= p * 0.70 - t * 0.30 elsif per <= 0.40 s *= p * 0.80 - t * 0.32 elsif per <= 0.60 s *= p * 0.90 - t * 0.36 else s *= p - t * 0.42 end
0 回覆:
張貼留言