N ta elementdan M tadan kombinatsiyalarni chiqarish
Xususiy holda:
2 ta elementdan uzunligi Mga teng bo'lgan barcha satrlarni hosil qilish:
barcha satrlar soni: 2^M ta bo'ladi, buni rekursiya usuli yordamida C# dasturlash tilining
Consule Applicationidan foydalanib hal qilamiz:
namespace TestCombination2M
{
class Combination2M
{
private string s = "XT"; //2ta belgini "XT" deb olamiz
public Combination2M(int m)
{
this.m = m;
resultList = new List<string>();
}
public int count = 0;
private string p = string.Empty;
public List<String> resultList { get; set; }
public void Generate(int k)
{
if (k != m)
{
for (int i = 0; i < s.Length; i++)
{
x[k + 1] = s[i]; Generate(k+1);
}
}
else
{
p = string.Empty;
for (int i = 1; i <= m; i++) p=p+x[i];
//Uzunligi m ga teng bo'gan satrlarni String tipidagi resultList ro'yxatiga qo'shib boramiz
resultList.Add(p);
count++;
}
}
private int m = 0;
private char[] x = new char[100];//m<=100 deb olamiz
}
class Program
{
static void Main(string[] args)
{
Combination2M comb2M = new Combination2M(10);//M=10
comb2M.Generate(0);//Rekursiyaning dastlabki qadamini 0 bilan boshlaymiz
foreach (var item in comb2M.resultList)
{
Console.WriteLine(item);
}
Console.WriteLine("----------------------");
Console.WriteLine("Hosil qilingan satrlar soni:" + comb2M.count.ToString());
Console.ReadLine();
}
}
}
Natija:
Dastur natijasi. XT elementlaridan uzunligi 10ga teng bo'lgan barcha "so'z" larni hosil qilish |
Ushbu dasturni umumiy holda ya'ni Nta elementdan uzunligi Mga teng bo'lgan barcha satrlarni hosil qilishda
ishlatish mumkin. Hosil qilingan barcha kombinatsiyalar soni N^M ga teng bo'ladi(Masalan N=3, M=2 uchun - 3^2=9 ta)
N=3 uchun dasturdagi private string s = "XT"; satrdagi
s nig qiymatini 3ta turlicha belgi berish yetarli, masalan s="XTZ" va M=3 uchun dastur natijasi quyidagicha bo'ladi: