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: | 主程式結束。 |