最近在做數據分析系統,裡面涉及到組合排列的問題,查找了很多的資料,但是感覺很多資料都是比較零散的,達不到項目需求。
後來經過一段的時間的探索,終於實現了組合排列的功能。下面我就來簡單說說吧。
需求描述:
要實現的功能就是字符或數字的組合排列。例如:ab 的所有組合為:ab,ba ; ab的所有不重復排列為:ab。
其實這也是彩票中常說的直選和組選。效果圖如下:
功能實現
這裡就不多說了,直接貼上實現代碼吧。
1.窗體界面設計
設計代碼:
1 partial class FrmDemo
2 {
3 /// <summary>
4 /// 必需的設計器變量。
5 /// </summary>
6 private System.ComponentModel.IContainer components = null;
7
8 /// <summary>
9 /// 清理所有正在使用的資源。
10 /// </summary>
11 /// <param name="disposing">如果應釋放托管資源,為 true;否則為 false。</param>
12 protected override void Dispose(bool disposing)
13 {
14 if (disposing && (components != null))
15 {
16 components.Dispose();
17 }
18 base.Dispose(disposing);
19 }
20
21 #region Windows 窗體設計器生成的代碼
22
23 /// <summary>
24 /// 設計器支持所需的方法 - 不要
25 /// 使用代碼編輯器修改此方法的內容。
26 /// </summary>
27 private void InitializeComponent()
28 {
29 this.label5 = new System.Windows.Forms.Label();
30 this.btnAll2 = new System.Windows.Forms.Button();
31 this.btnAll3 = new System.Windows.Forms.Button();
32 this.groupBox3 = new System.Windows.Forms.GroupBox();
33 this.txtAll = new System.Windows.Forms.TextBox();
34 this.label4 = new System.Windows.Forms.Label();
35 this.btnNot3 = new System.Windows.Forms.Button();
36 this.btnNot2 = new System.Windows.Forms.Button();
37 this.txtnot = new System.Windows.Forms.TextBox();
38 this.groupBox2 = new System.Windows.Forms.GroupBox();
39 this.groupBox1 = new System.Windows.Forms.GroupBox();
40 this.label3 = new System.Windows.Forms.Label();
41 this.label1 = new System.Windows.Forms.Label();
42 this.txtShow = new System.Windows.Forms.TextBox();
43 this.lbCount = new System.Windows.Forms.Label();
44 this.groupBox3.SuspendLayout();
45 this.groupBox2.SuspendLayout();
46 this.groupBox1.SuspendLayout();
47 this.SuspendLayout();
48 //
49 // label5
50 //
51 this.label5.AutoSize = true;
52 this.label5.Location = new System.Drawing.Point(13, 35);
53 this.label5.Name = "label5";
54 this.label5.Size = new System.Drawing.Size(65, 12);
55 this.label5.TabIndex = 20;
56 this.label5.Text = "輸入內容:";
57 //
58 // btnAll2
59 //
60 this.btnAll2.Location = new System.Drawing.Point(71, 76);
61 this.btnAll2.Name = "btnAll2";
62 this.btnAll2.Size = new System.Drawing.Size(90, 35);
63 this.btnAll2.TabIndex = 15;
64 this.btnAll2.Text = "2組合";
65 this.btnAll2.UseVisualStyleBackColor = true;
66 this.btnAll2.Click += new System.EventHandler(this.btnAll2_Click);
67 //
68 // btnAll3
69 //
70 this.btnAll3.Location = new System.Drawing.Point(165, 76);
71 this.btnAll3.Name = "btnAll3";
72 this.btnAll3.Size = new System.Drawing.Size(90, 35);
73 this.btnAll3.TabIndex = 11;
74 this.btnAll3.Text = "3組合";
75 this.btnAll3.UseVisualStyleBackColor = true;
76 this.btnAll3.Click += new System.EventHandler(this.btnAll3_Click);
77 //
78 // groupBox3
79 //
80 this.groupBox3.Controls.Add(this.label5);
81 this.groupBox3.Controls.Add(this.btnAll2);
82 this.groupBox3.Controls.Add(this.txtAll);
83 this.groupBox3.Controls.Add(this.btnAll3);
84 this.groupBox3.Location = new System.Drawing.Point(22, 189);
85 this.groupBox3.Name = "groupBox3";
86 this.groupBox3.Size = new System.Drawing.Size(369, 144);
87 this.groupBox3.TabIndex = 18;
88 this.groupBox3.TabStop = false;
89 this.groupBox3.Text = "取所有組合";
90 //
91 // txtAll
92 //
93 this.txtAll.Location = new System.Drawing.Point(85, 32);
94 this.txtAll.Name = "txtAll";
95 this.txtAll.Size = new System.Drawing.Size(239, 21);
96 this.txtAll.TabIndex = 12;
97 this.txtAll.Text = "abc012";
98 //
99 // label4
100 //
101 this.label4.AutoSize = true;
102 this.label4.Location = new System.Drawing.Point(13, 30);
103 this.label4.Name = "label4";
104 this.label4.Size = new System.Drawing.Size(65, 12);
105 this.label4.TabIndex = 19;
106 this.label4.Text = "輸入內容:";
107 //
108 // btnNot3
109 //
110 this.btnNot3.Location = new System.Drawing.Point(167, 59);
111 this.btnNot3.Name = "btnNot3";
112 this.btnNot3.Size = new System.Drawing.Size(90, 35);
113 this.btnNot3.TabIndex = 18;
114 this.btnNot3.Text = "3組合";
115 this.btnNot3.UseVisualStyleBackColor = true;
116 this.btnNot3.Click += new System.EventHandler(this.btnNot3_Click);
117 //
118 // btnNot2
119 //
120 this.btnNot2.Location = new System.Drawing.Point(71, 59);
121 this.btnNot2.Name = "btnNot2";
122 this.btnNot2.Size = new System.Drawing.Size(90, 35);
123 this.btnNot2.TabIndex = 17;
124 this.btnNot2.Text = "2組合";
125 this.btnNot2.UseVisualStyleBackColor = true;
126 this.btnNot2.Click += new System.EventHandler(this.btnNot2_Click);
127 //
128 // txtnot
129 //
130 this.txtnot.Location = new System.Drawing.Point(85, 27);
131 this.txtnot.Name = "txtnot";
132 this.txtnot.Size = new System.Drawing.Size(239, 21);
133 this.txtnot.TabIndex = 16;
134 this.txtnot.Text = "abc012";
135 //
136 // groupBox2
137 //
138 this.groupBox2.Controls.Add(this.label4);
139 this.groupBox2.Controls.Add(this.btnNot3);
140 this.groupBox2.Controls.Add(this.btnNot2);
141 this.groupBox2.Controls.Add(this.txtnot);
142 this.groupBox2.Location = new System.Drawing.Point(22, 32);
143 this.groupBox2.Name = "groupBox2";
144 this.groupBox2.Size = new System.Drawing.Size(369, 131);
145 this.groupBox2.TabIndex = 19;
146 this.groupBox2.TabStop = false;
147 this.groupBox2.Text = "取不重復組合";
148 //
149 // groupBox1
150 //
151 this.groupBox1.Controls.Add(this.groupBox2);
152 this.groupBox1.Controls.Add(this.groupBox3);
153 this.groupBox1.Location = new System.Drawing.Point(291, 39);
154 this.groupBox1.Name = "groupBox1";
155 this.groupBox1.Size = new System.Drawing.Size(416, 364);
156 this.groupBox1.TabIndex = 16;
157 this.groupBox1.TabStop = false;
158 this.groupBox1.Text = "操作";
159 //
160 // label3
161 //
162 this.label3.AutoSize = true;
163 this.label3.Location = new System.Drawing.Point(155, 11);
164 this.label3.Name = "label3";
165 this.label3.Size = new System.Drawing.Size(41, 12);
166 this.label3.TabIndex = 15;
167 this.label3.Text = "總數:";
168 //
169 // label1
170 //
171 this.label1.AutoSize = true;
172 this.label1.Location = new System.Drawing.Point(24, 11);
173 this.label1.Name = "label1";
174 this.label1.Size = new System.Drawing.Size(65, 12);
175 this.label1.TabIndex = 14;
176 this.label1.Text = "顯示結果:";
177 //
178 // txtShow
179 //
180 this.txtShow.Location = new System.Drawing.Point(26, 39);
181 this.txtShow.Multiline = true;
182 this.txtShow.Name = "txtShow";
183 this.txtShow.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
184 this.txtShow.Size = new System.Drawing.Size(217, 364);
185 this.txtShow.TabIndex = 12;
186 //
187 // lbCount
188 //
189 this.lbCount.AutoSize = true;
190 this.lbCount.Location = new System.Drawing.Point(202, 11);
191 this.lbCount.Name = "lbCount";
192 this.lbCount.Size = new System.Drawing.Size(41, 12);
193 this.lbCount.TabIndex = 13;
194 this.lbCount.Text = "label2";
195 //
196 // FrmDemo
197 //
198 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
199 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
200 this.ClientSize = new System.Drawing.Size(724, 414);
201 this.Controls.Add(this.groupBox1);
202 this.Controls.Add(this.label3);
203 this.Controls.Add(this.label1);
204 this.Controls.Add(this.txtShow);
205 this.Controls.Add(this.lbCount);
206 this.Name = "FrmDemo";
207 this.Text = "凹凸組合測試";
208 this.Load += new System.EventHandler(this.FrmDemo_Load);
209 this.groupBox3.ResumeLayout(false);
210 this.groupBox3.PerformLayout();
211 this.groupBox2.ResumeLayout(false);
212 this.groupBox2.PerformLayout();
213 this.groupBox1.ResumeLayout(false);
214 this.ResumeLayout(false);
215 this.PerformLayout();
216
217 }
218
219 #endregion
220
221 private System.Windows.Forms.Label label5;
222 private System.Windows.Forms.Button btnAll2;
223 private System.Windows.Forms.Button btnAll3;
224 private System.Windows.Forms.GroupBox groupBox3;
225 private System.Windows.Forms.TextBox txtAll;
226 private System.Windows.Forms.Label label4;
227 private System.Windows.Forms.Button btnNot3;
228 private System.Windows.Forms.Button btnNot2;
229 private System.Windows.Forms.TextBox txtnot;
230 private System.Windows.Forms.GroupBox groupBox2;
231 private System.Windows.Forms.GroupBox groupBox1;
232 private System.Windows.Forms.Label label3;
233 private System.Windows.Forms.Label label1;
234 private System.Windows.Forms.TextBox txtShow;
235 private System.Windows.Forms.Label lbCount;
236 }
折疊展開
2.添加引用
在項目中,添加引用——>AoTu.ZhuHe.dll
3.窗體類代碼
1 public partial class FrmDemo : Form
2 {
3 public FrmDemo()
4 {
5 InitializeComponent();
6 }
7
8 private void FrmDemo_Load(object sender, EventArgs e)
9 {
10 string svn = "0b1de737-cea695ab-fc505423-bdd5f3db ";
11 bool ret = ZhuHeNum.Initia(svn);
12 if (!ret)
13 MessageBox.Show("注冊失敗!");
14 }
15
16 private void btnNot2_Click(object sender, EventArgs e)
17 {
18 string str = txtnot.Text;
19 List<string> list = ZhuHeNum.NumNoRepeAssembly(str, 2);
20 if (list == null)
21 {
22 MessageBox.Show("注冊失敗!");
23 return;
24 }
25 list.Sort();
26 StringBuilder sbBuilder = new StringBuilder();
27
28 foreach (string s in list)
29 {
30 sbBuilder.Append(s);
31 sbBuilder.Append("\r\n");
32 }
33 txtShow.Clear();
34 txtShow.Text = sbBuilder.ToString();
35 lbCount.Text = list.Count.ToString();
36 }
37
38 private void btnNot3_Click(object sender, EventArgs e)
39 {
40 string str = txtnot.Text;
41 List<string> list = ZhuHeNum.NumNoRepeAssembly(str, 3);
42 if (list == null)
43 {
44 MessageBox.Show("注冊失敗!");
45 return;
46 }
47 list.Sort();
48 StringBuilder sbBuilder = new StringBuilder();
49
50 foreach (string s in list)
51 {
52 sbBuilder.Append(s);
53 sbBuilder.Append("\r\n");
54 }
55 txtShow.Clear();
56 txtShow.Text = sbBuilder.ToString();
57 lbCount.Text = list.Count.ToString();
58 }
59
60 private void btnAll2_Click(object sender, EventArgs e)
61 {
62 string str = txtAll.Text;
63 List<string> list = ZhuHeNum.NumGroupAssembly(str, 2);
64 if (list == null)
65 {
66 MessageBox.Show("注冊失敗!");
67 return;
68 }
69 list.Sort();
70 StringBuilder sbBuilder = new StringBuilder();
71
72 foreach (string s in list)
73 {
74 sbBuilder.Append(s);
75 sbBuilder.Append("\r\n");
76 }
77 txtShow.Clear();
78 txtShow.Text = sbBuilder.ToString();
79 lbCount.Text = list.Count.ToString();
80 }
81
82 private void btnAll3_Click(object sender, EventArgs e)
83 {
84 string str = txtAll.Text;
85 List<string> list = ZhuHeNum.NumGroupAssembly(str, 3);
86 if (list == null)
87 {
88 MessageBox.Show("注冊失敗!");
89 return;
90 }
91 list.Sort();
92 StringBuilder sbBuilder = new StringBuilder();
93
94 foreach (string s in list)
95 {
96 sbBuilder.Append(s);
97 sbBuilder.Append("\r\n");
98 }
99 txtShow.Clear();
100 txtShow.Text = sbBuilder.ToString();
101 lbCount.Text = list.Count.ToString();
102 }
103 }
展開折疊
4.運行效果
結束語
至此,直選和組選功能就實現了。附上demo源碼供參考。
Demo源碼下載