d089. 145 - Gondwanaland Telecom
http://zerojudge.tw/ShowProblem?problemid=d089
內容 :
Gondwanaland Telecom這家電話公司收費的標準是以所撥電話的距離及時段來訂定的,如下表。在這裡charging step就是指不同的距離。
所有的收費是根據該通電話每一分鐘多少錢來計算的,所以若有某通電話有跨時段,則按時段不同的收費標準分別計算在加總。例如:有一通電話從5:58pm開始到6:04pm結束,那前2分鐘是按白天(Day)的標準計費,而後4分鐘則按傍晚(Evening)的標準計費。
所有小於一分鐘的電話不列入計費,而且沒有一通電話會持續超過24小時。
輸入說明 :
每筆測試資料一列,代表某通電話的通話記錄。每列輸入資料包含6個部分,第一個部分為charging step(大寫字母A~E)。第二個部分為所撥的電話號碼(為7個數字及一個"-"的字串),第三、四個部分代表通話開始的時間:時及分。第五、六個部分代表通話結束的時間:時及分(均以24小時的時鐘來看,時、分均以2個數字來表現)。
若輸入列的第一個字為#,代表輸入結束。請參考Sample Input
輸出說明 :
對每一筆測試資料輸出一列,也包含6個部分。
第一個部分為所撥的電話號碼。第二、三、四部分分別代表這通電話所用各時段(Day,Evening,Night)的分鐘數,第五個部分為charging setp,第六個部分為這通電話總共計費多少錢。
各部分輸出於一定位置,以靠右對其來說,分別在10,16,22,28,31,39的位置。請參考Sample Output
範例輸入 :
C 765-7457 10 41 04 29B 207-0225 21 28 07 53B 316-0414 16 43 09 37C 463-1401 19 28 00 33D 514-9373 01 20 09 08#
範例輸出 :
765-7457 439 240 389 C 362.44 207-0225 0 32 593 B 34.45 316-0414 174 240 600 B 109.50 463-1401 0 152 153 C 70.05 514-9373 68 0 400 D 127.16
提示 :
出處 :
#include<stdio.h>
#include<stdlib.h>
float charge[5][3] = {{0.10,0.06,0.02},
{0.25,0.15,0.05},
{0.53,0.33,0.13},
{0.87,0.47,0.17},
{1.44,0.80,0.30}
};
main() {
char stop[2], phone[10];
int sh, sm, eh, em, C = 0;
while(scanf("%s", stop) == 1 && stop[0] != '#') {
scanf("%s %d %d %d %d", phone, &sh, &sm, &eh, &em);
int D = 0, E = 0, N = 0, ssum, esum, a;
if(eh < sh || (eh == sh && em <= sm)) eh += 24;
ssum = sh * 60 + sm;
esum = eh * 60 + em;
for(a = 0; a <= 2880; a++) {
if(a > ssum && a <= esum) {
switch(a) {
case 0 ... 480: N++;break;
case 481 ... 1080: D++;break;
case 1081 ... 1320: E++;break;
case 1321 ... 1920: N++;break;
case 1921 ... 2520: D++;break;
case 2521 ... 2760: E++;break;
case 2761 ... 3360: N++;break;
}
}
}
double price = D*charge[stop[0]-'A'][0] +
E*charge[stop[0]-'A'][1] +
N*charge[stop[0]-'A'][2];
printf("%10s%6d%6d%6d%3s%8.2lf\n", phone, D, E, N, stop, price);
}
return 0;
}