看板 C_Sharp 關於我們 聯絡資訊
解決了,中英混雜比純英文還要更難看的懂.. 是LIST的關係,改為陣列就沒有問題了 public class 字元排列 { 字母[] 取樣陣列; //全域變數,記錄使用者輸入的字串 public 字元排列(string 字元集) //把字串拆成一 個個字母,塞進全域變數 { 取樣陣列 = new 字母[字元集.Length]; char[] tempchar = 字元集.ToCharArray(); for (int i = 0; i < 字元集.Length; i++) { 取樣陣列[i] = new 字母(tempchar[i]); } } public void 開始排序( List<字母> 之前的字母) //這個方法會 接受上一層傳下來的排列到一半的字串 { List<字母> 我拿過的字母 = new List<字母>(); //區域變數,記 錄這層的遞迴有沒有用過這個字母 for (int i = 0; i < 取樣陣列.Length; i++) //每一層遞迴 的迴圈,會把所有合乎規則的字母,拿來排 { if (取樣陣列.ElementAt(i).被取走) continue; //如果被上一層 的遞迴拿走,就跳到下一個 foreach (字母 過去的字母 in 我拿過的字母) //檢查區域變數 ,看看自己之前是不是有把這個字母拿來排過 { if (過去的字母.字母元件 == 取樣陣列.ElementAt(i).字母 元件) goto 迴圈結束; } 取樣陣列[i].拿走(); //經過檢查,表示這個字母 可以拿來排,就從全域變數中「拿走」 我拿過的字母.Add(取樣陣列[i]); //記錄這個字母,以後遇到 這個字母時,直接跳過 之前的字母.Add(取樣陣列[i]); //把這個字母,加到上一層 傳下來字串 if (之前的字母.Count == 取樣陣列.Length) //如果完成排 列字串,就印出來,否則呼叫下一層遞迴 { foreach (字母 單字 in 之前的字母) { Console.Write(單字.字母元件); } Console.WriteLine(); } else { 開始排序( 之前的字母); } 之前的字母.RemoveAt((之前的字母.Count - 1)); //把這個字 母,從上一層傳下來字串移除 取樣陣列[i].放回(); //把這個字母放回全域變數,準備拿 下一個字母 迴圈結束: ; } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.6.12.245
F23ko:感謝.... 其實我會問這個 是想到另一種狀況.... 03/19 15:59
F23ko:例如用vector這個struct的時候 要記錄多點時該怎麼用 03/19 16:01
F23ko:這樣我知道該怎麼做了 感恩~ m(_ _)m 03/19 16:02