a058: MOD3 (21)
更新時間:2016/12/20
內容:相信判斷一個數除以三的餘數是多少,對你來說應該沒有問題。那,如果一次請你判斷很多個數呢嘿嘿?給你n個數字,請你輸出3k、3k+1、3k+2的數各有幾個。
輸入說明:
第一行有一個正整數n,代表接下來有幾個數字,接著有n個介於1到50000之間的數字,請你做判斷。
輸出說明:
輸出三個數字(以空白隔開),分別為n個數字中,三的倍數、三的倍數+1、三的倍數+2的數量。
範例輸入:
5
1
2
3
4
5
範例輸出:
1 2 2
提示:
背景知識:
迴圈
想一想,再看解答~
我的解題想法:
使用5個變數儲存資料,分別為個數、暫存的數字、3的倍數的數量、3的倍數+1的數量和3的倍數+2的數量。我們知道次數,所以直接使用 for 迴圈,並在 for 迴圈內部取得數字且馬上分類計數。
程式碼:
#include <stdio.h> int main(void){ int n,tmp,k0=0,k1=0,k2=0; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&tmp); tmp = tmp%3; tmp==0?k0++:(tmp==1?k1++:k2++); } printf("%d %d %d",k0,k1,k2); return 0; }程式碼解析:
#1: | 引入標準輸入/輸出串流。 |
#2: | 主程式開始,回傳引數int,沒有參數。 |
#3: | 宣告5個整數(int)變數「n」、「tmp」、「k0」、「k1」、「k2」,範圍–2,147,483,648 到 2,147,483,647。 並且把 k0、k1 和 k2 初始化,初始值為 0 。 |
#4: | 從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「n」。 |
#5: | 迴圈 for 開始。區域變數「i」,從 1 開始到 n 結束 (int i=1;i<=n;i++)。 |
#6: | 從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「tmp」,一次讀取一個數字。 |
#7: | 計算此數字除以 3 的餘數存回「tmp」。 |
#8: | 判斷此數字除以 3 的餘數是否等於 0,如果是 k0 加 1,否則繼續判斷是否等於 1,如果是 k1 加 1,否則 k2 加 1。 |
#9: | 迴圈 for 結束。 |
#10: | 將格式化數據顯示到標準輸出。連續輸出3個整數,中間空格(%d %d %d),分別輸出「k0」、「k1」、「k2」。 |
#11: | 主程式回傳整數「0」。 |
#12: | 主程式結束。 |