看板 Programming
作者 標題 Re: [請益] 用遞迴實作巢狀迴圈
時間 2010年06月13日 Sun. PM 11:28:49
i=2
i=1
i=0
j=0
3
2
1 設一開始輸入的值: x[2]=3, x[1]=2, x[0]=1
j=1
3
2
0 為該位數輸出值的最大值
j=2
3
1
1
j=3
3
1
0
j=4
3
0
1
j=5
3
0
0
j=6
2
2
1
j=7
2
2
0
j=8
2
1
1
j=9
2
1
0
j=10
2
0
1
j=11
2
0
0
... 執行第j次時,得到的三個數為 y[2], y[1], y[0]
T[i]
24
6
2 輸出值序列的週期
來分析一下這表格,可以發現 i=0 時,得到的值為 1,0,1,0,1,0, ...
也就是週期為 T[0] = x[0]+1 = 2 的 1,0 序列
所以執行了j次,當 j%T[0] 相同時,得到的值 y[0][j] 也會相同 (%是取餘數運算子)
j%T[0]的結果為 0,1 ,但序列為 1,0,所以我們可以用輸入值x[0]=1減餘數得到序列值
所以執行第j次時 y[0] = x[0] - j%T[0], 其中 T[0] = x[0]+1
再看一下 i=1 時,得到的序列為 2,2,1,1,0,0,2,2,1,1,0,0, ...
也就是週期為 T[1] = (x[1]+1)*T[0] = 6 的 2,2,1,1,0,0 序列
所以執行了j次,當 j%T[1] 相同時,得到的值 y[1][j] 也會相同
j%T[1]的結果為 0,1,2,3,4,5,...,但序列為 2,2,1,1,0,0,...
只要先將 j%T[1] 除以T[0],小數無條件捨去就會變成 0,0,1,1,2,2,...,再跟輸入值x[2]相減即可
所以執行第j次時 y[1] = x[1] - floor((j%T[1]) / T[0]), 其中 T[1] = (x[1]+1)*T[0], floor為捨去小數
以此類推,執行第j次時,輸出的第i個數為
y[i] = x[i] - floor((j%T[i]) / T[i-1]), 其中 T[i] = (x[i]+1)*T[i-1], 1<i<N
有了這公式後,寫程式就不難了吧
補一下程式好了
int main(){
}
--int i, j, N = 3; //N為輸入值的位數
int x[] = {1,2,3}; //輸入值
int T[3]; //輸出值三個位數各別的週期
int y[3]; //用來存第j次輸出值的三個位數
T[0] = x[0]+1; //輸出值第一個位數的週期
for(i=1;i<N;i++) T[i] = (x[i]+1)*T[i-1]; //輸出值第i個位數的週期
for(j=0;j<T[N-1];j++){ //i=N-1時的週期T[N-1]就是j會執行幾次
y[0] = x[0] - floor(j%T[0]);
for(i=1;i<N;i++) y[i] = x[i] - floor( (j%T[i]) / T[i-1] );
show(y,N); //顯示第j次的計算結果
}
}
※ 來源: DISP BBS 看板: Programming 文章連結: http://disp.cc/b/33-3a7
※ 作者: Knuckles 來自: 118.166.115.207 時間: 2010-06-13 23:28:49
※ 編輯: Knuckles 來自: 118.166.115.207 時間: 2010-06-13 23:49:30
※ 編輯: Knuckles 來自: 118.166.115.207 時間: 2010-06-14 01:59:08
※ 編輯: Knuckles 來自: 118.166.115.207 時間: 2010-06-14 02:03:18
※ 編輯: Knuckles 來自: 118.166.115.207 時間: 2010-06-14 13:12:50
※ 編輯: Knuckles 來自: 118.166.115.207 時間: 2010-06-14 13:14:48
※ 編輯: Knuckles 來自: 118.166.115.207 時間: 2010-06-14 13:15:33
※ 編輯: Knuckles 時間: 2010-10-23 05:00:01 來自: 111-248-0-184.dynamic.hinet.net
※ 同主題文章:
06-13 02:30 □ [請益] 用遞迴實作巢狀迴圈
06-13 04:43 Re [請益] 用遞迴實作巢狀迴圈
● 06-13 23:28 Re [請益] 用遞迴實作巢狀迴圈
06-14 01:57 Re [請益] 用遞迴實作巢狀迴圈
06-21 21:06 Re [請益] 用遞迴實作巢狀迴圈
10-23 18:48 Re [請益] 用遞迴實作巢狀迴圈
※ 看板: Programming 文章推薦值: 0 目前人氣: 0 累積人氣: 223
回列表(←)
分享