14884 - Order Ranker (with Critical Priority)
|
Time |
Memory |
| Case 1 |
1 sec |
32 MB |
| Case 2 |
1 sec |
32 MB |
| Case 3 |
1 sec |
32 MB |
| Case 4 |
1 sec |
32 MB |
| Case 5 |
1 sec |
32 MB |
| Case 6 |
1 sec |
32 MB |
| Case 7 |
1 sec |
32 MB |
| Case 8 |
1 sec |
32 MB |
| Case 9 |
1 sec |
32 MB |
| Case 10 |
1 sec |
32 MB |
Description
電子商務系統中,每筆訂單都有三個屬性:
- Amount(金額):訂單總價,範圍 0~20000
- ShippingDays(運送天數):下單到到貨天數,範圍 1~30
- CustomerRating(顧客信用評分):範圍 0~100
此外,系統對於訂單有折扣策略:
訂單分類如下:
- HighPriority:高金額 (>=10000) 且 顧客評分高 (>=70) 且 快速運送 (<=3 天)
- CriticalPriority:非高金額 (<10000) 但 要求極速運送 (<= 1 天)
- MediumPriority:(高金額 (>=10000) 或 顧客評分高 (>=70)),且不符合上述優先級
- LowPriority:低金額 (<10000) 且 顧客評分低 (<70) 且 慢速運送 (>7 天)
- Standard:不屬於上述任何一類
給定主要執行程式main.c (題號.c)、以及Header檔function.h (題號.h);請試著完成Header檔中未實現的函式:SetOrderValue()、CalculateFinalAmount()、GetOrderPriority()、CountPriority()
function.h:
enum ProductType
{
ELECTRONICS,
CLOTHING,
FOOD,
BOOK
};
enum OrderPriority
{
HighPriority,
CriticalPriority,
MediumPriority,
LowPriority,
Standard
};
typedef struct Order
{
char name[50]; // 商品名稱
enum ProductType type; // 商品類別
int Amount; // 訂單金額
int ShippingDays; // 運送天數
int CustomerRating; // 顧客信用評分
} Order;
methods:
-float CalculateFinalAmount(Order *firstOrder) – 需不斷拜訪傳進的 Order 記憶體的下一個 Order(或透過陣列指標移動),並依商品類別計算折扣後金額,返回最後金額
-enum OrderPriority GetOrderPriority(Order *firstOrder) – 需不斷拜訪傳進的 Order 記憶體,依金額、顧客信用評分、運送天數判斷優先級,返回該優先級
-void CountPriority(Order *firstOrder, int n, int *high, int *medium, int *low, int *standard) – 需透過迴圈和指標拜訪所有 Order,統計每個優先級訂單數量
hint:
- 可以透過迴圈和指標不斷拜訪下一個 Order
- 可以透過判斷指標是否為 NULL(或迴圈計數到 n)來決定何時終止
- 可以透過 Order 結構體成員判斷折扣與優先級
function.c
#include "function.h"
// 設定單筆訂單資料
void SetOrderValue(Order *order, char *_name, enum ProductType _type, int _amount, int _days, int _rating)
{
// TODO: 使用指標設定 Order 的各個欄位
}
// 計算折扣後金額
float CalculateFinalAmount(Order *firstOrder)
{
// TODO: 透過指標拜訪 Order,判斷是否 FOOD 類折扣,返回最終金額
}
// 判斷單筆訂單優先級
enum OrderPriority GetOrderPriority(Order *firstOrder)
{
// TODO: 透過指標拜訪 Order,依規則判斷並返回優先級
}
// 統計多筆訂單各優先級數量
CountPriority(Order *orders, int n, int *high, int *critical, int *medium, int *low, int *standard)
{
// TODO: 透過指標迴圈拜訪所有訂單,累計各優先級數量
}
Input
每筆訂單包含以下資料:
Name Type Amount ShippingDays CustomerRating
……
Name:商品名稱(字串,長度 ≤ 50)
Type:商品類別(整數,0=ELECTRONICS, 1=CLOTHING, 2=FOOD, 3=BOOK)
Amount:訂單金額(整數,0 ≤ Amount ≤ 20000)
ShippingDays:運送天數(整數,1 ≤ ShippingDays ≤ 30)
CustomerRating:顧客信用評分(整數,0 ≤ CustomerRating ≤ 100)
Note:
- 第一行輸入為訂單數量 N,接下來 N 行為訂單資料
- 不需處理輸入
Output
統計所有訂單的優先級數量,輸出格式如下:
HighPriority: x
CriticalPriority: y
MediumPriority: z
LowPriority: n
Standard: m
每筆訂單折扣後的最終金額:
Name final amount: value
若商品類別為 FOOD,最終金額需打 9 折,value 保留兩位小數
Note:
- 輸出的最後必須要有一個換行符號 (“\n”)
- 不需處理輸出
Partial Judge Code
14884.c
Partial Judge Header
14884.h
Tags