d073: 分組報告(11)
更新時間:2016/12/20
內容:電腦課要同學分組做期末報告,分組的方式為依座號順序,每 3 個人一組。如:1, 2, 3 為第一組,4, 5, 6 為第二組….以此類推。輸入同學的座號,請判斷他在哪一組。
輸入說明:
輸入只有一行,含有一個正整數 n,代表同學的座號。
輸出說明:
輸出該同學的組別。
範例輸入:
7
範例輸出:
3
提示:
背景知識:
算術運算子
你能只用算術運算子,而不用 if 解出這題嗎?
想一想,再看解答~
我的解題想法:
座號除以3,觀察 商數、餘數 與 組別 的關係
座號 | 商 | 餘數 | 組別 |
---|---|---|---|
1 | 0 | 1 | 1 |
2 | 0 | 2 | 1 |
3 | 1 | 0 | 1 |
4 | 1 | 1 | 2 |
5 | 1 | 2 | 2 |
6 | 2 | 0 | 2 |
7 | 2 | 1 | 3 |
8 | 2 | 2 | 3 |
9 | 3 | 0 | 3 |
10 | 3 | 1 | 4 |
11 | 3 | 2 | 4 |
12 | 4 | 0 | 4 |
... | ... | ... | ... |
♠使用「 if else 」解題。程式碼:
#include <stdio.h> int main(void){ long long int n; scanf("%lld",&n); if((n%3)>0){ printf("%lld",(n/3)+1); }else{ printf("%lld",(n/3)); } return 0; }程式碼解析:
#1: | 引入標準輸入/輸出串流。 |
#2: | 主程式開始,回傳引數int,沒有參數。 |
#3: | 宣告1個長長整數(long long int)變數「n」,範圍–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。 |
#4: | 從標準輸入讀取格式化數據。讀取1個長長整數(%lld),指定值給「n」。 |
#5: | 邏輯判斷式 if 開始。判斷座號除以3的餘數是否大於0「(n%3)>0」。 |
#6: | 將格式化數據顯示到標準輸出。輸出1個長長整數(%lld)「(n/3)+1」。 |
#7: | 邏輯判斷 else。 |
#8: | 將格式化數據顯示到標準輸出。輸出1個長長整數(%lld)「(n/3)」。 |
#9: | 邏輯判斷 if 結束。 |
#10: | 主程式回傳整數「0」。 |
#11: | 主程式結束。 |
進階想法:
多加一個欄位:把餘數加2,再除以3取商數。觀察「商數」、「(餘數+2)/3」與「組別」的關係。
座號 | 商 | 餘數 | 組別 | (餘數+2)/3 |
---|---|---|---|---|
1 | 0 | 1 | 1 | 1 |
2 | 0 | 2 | 1 | 1 |
3 | 1 | 0 | 1 | 0 |
4 | 1 | 1 | 2 | 1 |
5 | 1 | 2 | 2 | 1 |
6 | 2 | 0 | 2 | 0 |
7 | 2 | 1 | 3 | 1 |
8 | 2 | 2 | 3 | 1 |
9 | 3 | 0 | 3 | 0 |
10 | 3 | 1 | 4 | 1 |
11 | 3 | 2 | 4 | 1 |
12 | 4 | 0 | 4 | 0 |
... | ... | ... | ... | ... |
♠使用「算數運算子」解題。程式碼:
#include <stdio.h> int main(void){ long long int n; scanf("%lld",&n); printf("%lld",(n/3)+((n%3)+2)/3); return 0; }程式碼解析:
#1: | 引入標準輸入/輸出串流。 |
#2: | 主程式開始,回傳引數int,沒有參數。 |
#3: | 宣告1個長長整數(long long int)變數「n」,範圍–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。 |
#4: | 從標準輸入讀取格式化數據。讀取1個長長整數(%lld),指定值給「n」。 |
#5: | 將格式化數據顯示到標準輸出。輸出1個長長整數(%lld)「(n/3)+((n%3)+2)/3」。 |
#6: | 主程式回傳整數「0」。 |
#7: | 主程式結束。 |