#include <stdio.h>
#include <stdlib.h>
#define HOURS 24
int main() {
int users[HOURS];
int total = 0;
// 1. 輸入與總和
printf("請輸入 24 小時登入用戶數 (空白分隔):\n");
for (int i = 0; i < HOURS; i++) {
if (scanf("%d", &users[i]) != 1) return 1;
total += users[i];
}
// 2. 輸出表頭
printf("\n%-12s %-8s %s\n", "時間區間", "登入人數", "佔比(%)");
// 3. 追蹤最大/最小
int maxIdx = 0, minIdx = 0;
for (int i = 0; i < HOURS; i++) {
double pct = total ? (users[i] * 100.0 / total) : 0.0;
printf("%02d:00-%02d:00 %-8d %.1f%%\n", i, (i+1)%24, users[i], pct);
if (users[i] > users[maxIdx]) maxIdx = i;
if (users[i] < users[minIdx]) minIdx = i;
}
// 4. 彙總資訊
printf("\n最大登入人數 %d 發生在 %02d:00-%02d:00 之間\n",
users[maxIdx], maxIdx, (maxIdx+1)%24);
printf("最小登入人數 %d 發生在 %02d:00-%02d:00 之間\n",
users[minIdx], minIdx, (minIdx+1)%24);
return 0;
}
請輸入 24 小時登入用戶數 (空白分隔):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
時間區間 登入人數 佔比(%)
00:00-01:00 1 0.7%
01:00-02:00 2 1.3%
...
22:00-23:00 23 15.3%
23:00-00:00 24 16.0%
最大登入人數 24 發生在 23:00-00:00 之間
最小登入人數 1 發生在 00:00-01:00 之間
%02d:00-%02d:00 配合 (i+1)%24 處理跨午夜顯示。users[i] * 100.0 / total 強制雙精度運算,避免整數除法截斷。scanf 回傳值檢查,防止非數字輸入導致無限迴圈。此程式展示了陣列處理、格式化輸出、極值追蹤等 C 語言基礎技能的綜合運用,適合初學者練習與面試熱身。