pr1d3 adlı üyeden alıntı: mesajı görüntüle
Yanlış anlamadıysam aşağıdaki gibi bir kod işinizi görür. Sizin kodun çıktı vermeme sebebi split sonucu olarak ArrayList'e eklemeniz. Split string[] dönüyor, siz Contains kısmında string arıyorsunuz haliyle if içine hiç girmiyor.
Kodun çıktısı: https://prnt.sc/rbw47m

class Program
{
static void Main(string[] args)
{
int[] sayilar = { 5, 2, 2, 5, 1, 2, 1, 1, 2, 1, 1, 5, 10, 2,
5, 1, 2, 1, 10, 10, 2, 2, 1, 10, 1, 5, 1, 10, 1, 2, 1, 1,
5, 1, 1, 1, 40, 1, 1, 5, 40, 2, 20, 1, 5, 2, 10, 10, 2, 1, 1, 5, 10, 1, 2,
10, 40, 2, 1, 10, 20 };

int sayi1, sayi2, sayi3;
int sayac1 = 0;

sayi1 = Convert.ToInt32(Console.ReadLine());
sayi2 = Convert.ToInt32(Console.ReadLine());
sayi3 = Convert.ToInt32(Console.ReadLine());

int[] pattern = { sayi1, sayi2, sayi3 };

List<Result> results = new List<Result>();
if (sayilar.Contains(sayi1) && sayilar.Contains(sayi2) && sayilar.Contains(sayi3))
{
int index = 0;
do
{
index = SearchPattern<int>(sayilar, pattern, index);
sayac1++;
if (index > 0)
{
var result = results.FirstOrDefault(x => x.Value == sayilar[index]);
if (result != null)
result.Count++;
else
results.Add(new Result(sayilar[index]));
}
} while (index != -1);

foreach (var result in results)
{
Console.WriteLine($"{result.Count} kez {result.Value} geldi");
}

}
Console.ReadKey();
}

public static int SearchPattern<T>(T[] source, T[] pattern, int startIndex = 0)
{
for (int i = startIndex; i < source.Length - pattern.Length; i++)
{
for (int j = 0; j < pattern.Length; j++)
{
if (!EqualityComparer<T>.Default.Equals(pattern[j], source[i + j]))
{
goto jmp;
}
}
return i + pattern.Length;
jmp:;
}
return -1;
}
class Result
{
public int Value;
public int Count;
public Result(int value)
{
Value = value;
Count = 1;
}
}
}
kodu henüz inceleyemedim ama output tam istediğimi veriyor çok teşekkür ederim hocam adamsın.



pr1d3 adlı üyeden alıntı: mesajı görüntüle
Yanlış anlamadıysam aşağıdaki gibi bir kod işinizi görür. Sizin kodun çıktı vermeme sebebi split sonucu olarak ArrayList'e eklemeniz. Split string[] dönüyor, siz Contains kısmında string arıyorsunuz haliyle if içine hiç girmiyor.
Kodun çıktısı: https://prnt.sc/rbw47m

class Program
{
static void Main(string[] args)
{
int[] sayilar = { 5, 2, 2, 5, 1, 2, 1, 1, 2, 1, 1, 5, 10, 2,
5, 1, 2, 1, 10, 10, 2, 2, 1, 10, 1, 5, 1, 10, 1, 2, 1, 1,
5, 1, 1, 1, 40, 1, 1, 5, 40, 2, 20, 1, 5, 2, 10, 10, 2, 1, 1, 5, 10, 1, 2,
10, 40, 2, 1, 10, 20 };

int sayi1, sayi2, sayi3;
int sayac1 = 0;

sayi1 = Convert.ToInt32(Console.ReadLine());
sayi2 = Convert.ToInt32(Console.ReadLine());
sayi3 = Convert.ToInt32(Console.ReadLine());

int[] pattern = { sayi1, sayi2, sayi3 };

List<Result> results = new List<Result>();
if (sayilar.Contains(sayi1) && sayilar.Contains(sayi2) && sayilar.Contains(sayi3))
{
int index = 0;
do
{
index = SearchPattern<int>(sayilar, pattern, index);
sayac1++;
if (index > 0)
{
var result = results.FirstOrDefault(x => x.Value == sayilar[index]);
if (result != null)
result.Count++;
else
results.Add(new Result(sayilar[index]));
}
} while (index != -1);

foreach (var result in results)
{
Console.WriteLine($"{result.Count} kez {result.Value} geldi");
}

}
Console.ReadKey();
}

public static int SearchPattern<T>(T[] source, T[] pattern, int startIndex = 0)
{
for (int i = startIndex; i < source.Length - pattern.Length; i++)
{
for (int j = 0; j < pattern.Length; j++)
{
if (!EqualityComparer<T>.Default.Equals(pattern[j], source[i + j]))
{
goto jmp;
}
}
return i + pattern.Length;
jmp:;
}
return -1;
}
class Result
{
public int Value;
public int Count;
public Result(int value)
{
Value = value;
Count = 1;
}
}
}
hocam bir şey daha sorabilir miyim sayılari belli bölgelere bölsek asal sayılar, 5 in katları sayılar gibi 2 bölge olsa.if (sayilar.Contains(sayi1) && sayilar.Contains(sayi2) && sayilar.Contains(sayi3)) bu if e bir else yazsak bize bölgesini verse.
 public static int asalolanlar(int sayi)
{
int[] asalBolge= { 2,5,7,11};
int asalBolgesi= 0;
for(int i=0; i<asalBolge.Length; i++)
{
if(sayi==asalBolge[i])
{
asalBolgesi++;
}
}
return asalBolgesi;
}
aynı şeyi 5 için yapsak

 public static int BesBolgesi(int sayi)
{
int[] besBolge= { 10,15,20,25,30,35,40};
int besBolgesi= 0;
for(int i=0; i<besBolge.Length; i++)
{
if(sayi==besBolge[i])
{
besBolgesi++;
}
}
return besBolgesi;
}
bu değerleri döndürsek else kısmında fonksiyonları sayıyı göndersem

 int asalSayac=0, besSayac=0;
int birinciSayiBolgesi = asalolanlar(sayi1);
int birinciSayiBolgesi2 = BesBolgesi(sayi1);

if(asalolanlar>0)
{
asalSayac++;
}
else if(birinciSayiBolgesi2>0)
{
besSayac++;
}
bu şekilde sayıların bölgesini tespit edebiliyorum fakat bir sonraki sayının bölgesini bulamıyorum.Bunun için sizin yazdığınız SearchPattern<T> fonksiyonunu kullanayım dedim fakat T[] source, T[] pattern bu 2 parametreyi ne karşılar bulamadım.Tabi birde bunun kaç kere tekrar ettiğini de bulmam gerekiyor.Bu ilk yazdığınız sıradaki sayı bulmayı bir fonksiyon haline getirebilir miyiz ?