天天看點

[C# 開發技巧]如何使不符合要求的元素等于離它最近的一個元素

今天在MSDN論壇中看到這樣的一個問題,覺得非常鍛煉思維能力,是以這裡記錄下來作為備份,題目的要求是這樣的:

假設有一組字元串數組{"0","0","1","2","3",“0”,"4","0","0"},如何查找使0等于離它最近的且不為0的元素,如果離它最近的不為0的元素有兩個,則等于上一個元素,即想得到重新指派後這樣的數組{"1","1","1","2","3",“3”,"4","4","4"}

1. 首先對數組裡面的數字進行一次周遊,如果目前的值不為“0”把值添加進的結果數組中,否則對它進行處理。

2. 處理不為“0”的值的時候,用一種“等距離比較”的方法,找出等距離内的左右2個值,優先看左邊的值是否為“0”,如果是的話跳過,如果不是的話将結果數組内的目前值替換為此值。

3. 距離(就是代碼裡面的j)的最大值為數組長度減去1,周遊的時候注意i-j的值不小于0,i+j的值要小于數組長度。

具體實作代碼為:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<code>string</code><code>[] s = </code><code>new</code> <code>String[9] { </code><code>"0"</code><code>, </code><code>"0"</code><code>, </code><code>"1"</code><code>, </code><code>"0"</code><code>, </code><code>"0"</code><code>, </code><code>"0"</code><code>, </code><code>"4"</code><code>, </code><code>"0"</code><code>, </code><code>"3"</code> <code>};</code>

<code>            </code><code>string</code><code>[] result = </code><code>new</code> <code>string</code><code>[9];</code>

<code>            </code><code>for</code> <code>(</code><code>int</code> <code>i = 0; i &lt; s.Length; i++)</code>

<code>            </code><code>{</code>

<code>                </code><code>if</code> <code>(s[i] != </code><code>"0"</code><code>)</code>

<code>                </code><code>{</code>

<code>                    </code><code>result[i] = s[i];</code>

<code>                    </code><code>continue</code><code>;</code>

<code>                </code><code>}</code>

<code>                </code><code>// j是距離,初始化距離為1</code>

<code>                </code><code>for</code> <code>(</code><code>int</code> <code>j = 1; j &lt; s.Length; j++)</code>

<code>                </code><code>{          </code>

<code>                    </code><code>if</code> <code>(i - j &gt;= 0)</code>

<code>                    </code><code>{</code>

<code>                        </code><code>// 左邊距離為j的元素不等于0時</code>

<code>                        </code><code>if</code> <code>(s[i - j] != </code><code>"0"</code><code>)</code>

<code>                        </code><code>{</code>

<code>                            </code><code>result[i] = s[i - j];</code>

<code>                            </code><code>break</code><code>;</code>

<code>                        </code><code>}</code>

<code>                    </code><code>}</code>

<code>                    </code><code>if</code> <code>(i + j &lt; s.Length)</code>

<code>                        </code><code>// 右邊距離為j的元素不等于0時</code>

<code>                        </code><code>if</code> <code>(s[i + j] != </code><code>"0"</code><code>)</code>

<code>                            </code><code>result[i] = s[i + j];</code>

<code>            </code><code>}</code>

<code>            </code><code>for</code> <code>(</code><code>int</code> <code>i = 0; i &lt; result.Length; i++)</code>

<code>                </code><code>Console.WriteLine(result[i]);</code>

<code>               </code> 

<code>            </code><code>Console.ReadLine();</code>

[C# 開發技巧]如何使不符合要求的元素等于離它最近的一個元素

     本文轉自LearningHard 51CTO部落格,原文連結:http://blog.51cto.com/learninghard/1265482,如需轉載請自行聯系原作者