2015年6月1日 星期一

d073:分組報告(11)

d073: 分組報告(11)

更新時間:2016/12/20
內容
  電腦課要同學分組做期末報告,分組的方式為依座號順序,每 3 個人一組。如:1, 2, 3 為第一組,4, 5, 6 為第二組….以此類推。輸入同學的座號,請判斷他在哪一組。
輸入說明
  輸入只有一行,含有一個正整數 n,代表同學的座號。
輸出說明
  輸出該同學的組別。
範例輸入
  7
範例輸出
  3
提示
背景知識
  算術運算子
  你能只用算術運算子,而不用 if 解出這題嗎?



想一想,再看解答~


我的解題想法
  座號除以3,觀察 商數、餘數 與 組別 的關係
座號餘數組別
1011
2021
3101
4112
5122
6202
7213
8223
9303
10314
11324
12404
............
如果餘數為0,商跟組別是相同的;如果餘數不為0;商跟組別相差1。
♠使用「 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
10111
20211
31010
41121
51221
62020
72131
82231
93030
103141
113241
124040
...............
組別 = 商數 + (餘數+2)/3
♠使用「算數運算子」解題。程式碼
#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:主程式結束。