如何將相同字之間相連起來 |
答題得分者是:RedSnow
|
IORIS
一般會員 發表:15 回覆:21 積分:7 註冊:2005-01-14 發送簡訊給我 |
假設我有一個矩陣為200*100
裡面存有許多的0跟1
現在我想要做的是
將相鄰的1 (假設相鄰的條件是:距離d < 5(變數))
個別連起來
例如: 0010001000001001010000 變成
0011111000001111110000 (假設兩個1 相距5之內 把全部的0都變成1) 假如d距離很小(2-3) 我可以用幾個if 去寫出來
但當d一但變大甚至要能自變
救難倒我這個程式新手了 麻煩各位前輩 能幫我解答!! 謝謝 !! 發表人 - ioris 於 2005/08/03 02:28:07
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
IORIS 您好: 以下是我的想法,您參考一下:
const MYSIZE = 22; // 先設一個小一點的 Size 作測試 int A[MYSIZE] = {0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0}; int d = 5; // 相鄰條件數 // 先顯示目前陣列內容於 Memo 物件上 AnsiString S1 = ""; for(int i=0; i以上的陣列大小您可以稍後改為您要的大小。 7 天天敲鍵盤 v 時時按滑鼠 8 |
IORIS
一般會員 發表:15 回覆:21 積分:7 註冊:2005-01-14 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
IORIS 您好:
引言:請問原本0010001000001001010000 每一個數的chk是 true or false 呢 以及我不知道你在哪時讀到第一個1chk 不是對應到每一個數,它只是一個布林邏輯變數,只有在設值給它的時候才會被變更,chk 的初值是設定成 false: bool chk = false;當程式在迴圈裡讀到某個陣列資料為 0 而且 chk 值不是 true 時,才會將 chk 設為 true: if(A[i] == 0 && !chk && i!=0){ // !chk 表示 chk 不是 true 時 chk = true; ....迴圈是由陣列開頭逐一比對,在尚未碰到第一個 1 之前,若比對到的陣列為 0 的話,應該不能設定 chk 為 true,否則後續的計算會錯誤,因此另外又加上一個 i!=0 的判斷式,意思是比對的陣列不是第 0 個時才做設定 chk 為 true 的動作。 第一個 1 會在迴圈的 i 值為 2 時讀到。 7 天天敲鍵盤 v 時時按滑鼠 8 |
IORIS
一般會員 發表:15 回覆:21 積分:7 註冊:2005-01-14 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
IORIS 您好: 您的寫法沒有什麼問題,而且比我原先寫的還要簡潔些,但是重設 1 的動作後,應將 pos 歸零,否則遇有連續相鄰的 1 之後的處理會有誤。 您的第二個問題所說的 "當他是孤立的1時",也可以用您的方式來處理,只是比對條件改為 010 即可,只是對於回圈開始與結束這兩個位置要特別加上比對,開頭時比對 10,而結尾時比對 01,例如:
... 前略... int pos = -1; // 不為 -1 代表有孤立 1 的資料要代換 for (int i=1; i7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/08/03 21:23:14 |
IORIS
一般會員 發表:15 回覆:21 積分:7 註冊:2005-01-14 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |