# Greedy# Modulo Operation# Counting

a058(2) - Error

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取一連串整數,並統計每個整數除以 3 的餘數(0, 1, 2)分別出現的次數。每次讀取一個整數後,立即輸出三個餘數的計數。如果讀取失敗(例如,輸入結束),則停止讀取並結束程式。

解題思路

這題的解題思路非常簡單,使用一個大小為 3 的陣列 a 來記錄每個餘數的計數。每次讀取一個整數 n,計算 n % 3 的值,並將對應的計數器加 1。然後,立即輸出三個計數器的值。使用 scanf 的返回值來判斷是否成功讀取到一個整數,如果讀取失敗,則結束迴圈。printf 的返回值也用來確保輸出成功。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入的整數個數。因為需要遍歷所有輸入的整數。
  • 空間複雜度: O(1),因為只使用了一個固定大小的陣列 a 來儲存計數,空間使用不隨輸入大小變化。

程式碼

#include <stdio.h>
int main(){
	int n(scanf("%d",&n)),a[3]={0};
	while((scanf("%d",&n)>0)||(printf("%d %d %d",a[0],a[1],a[2])&&0))++a[n%3];
}

Discussion