none
Zor bir Algoritma(Mantık)Sorusu RRS feed

  • Soru

  • Yapmak istediğim şey için algoritma olmasa da mantığım tıkandı.

    Yardımcı olursanız sevinirim.

    Nasıl üç elemanı sıralıyor isek (örneğin a, b, c için)

    abc,  acb,  bac,  bca,  cab,  cba   gibi (6 farklı sıralama)

    1,2,3,4,5,6,7,8  şeklindeki 8 elemanın bütün sıralama şekillerini c# ile nasıl gösterebilirim? (40320 farklı sıralama)

    içiçe döngüleri kursam bile sürekli sorun yaşadım.

    Şimdiden teşekkür ederim


    4 Aralık 2018 Salı 12:44

Yanıtlar

  • Sorunuzun yanıtı permutasyon ile verilebilir.

        class Program
        {
            static int adet = 0;
    
            static void Degistir(ref string a, ref string b)
            {
                if (a == b)
                    return;
                string c = a;
                a = b;
                b = c;
            }
    
            static void Permutasyon(string[] dizi, int sol, int sag)
            {
                if (sol == sag)
                {
                    adet++;
                    Console.WriteLine(string.Join(",", dizi));
                }
                else
                    for (int i = sol; i <= sag; i++)
                    {
                        Degistir(ref dizi[sol], ref dizi[i]);
                        Permutasyon(dizi, sol + 1, sag);
                        Degistir(ref dizi[sol], ref dizi[i]);
                    }
            }
    
            static void Main(string[] args)
            {
                Console.Write("Dizi elemanlarını giriniz! (Her elemanı virgülle ayırın! Örneğin: 1,2,3,4):");
                string[] dizi = Console.ReadLine().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                Permutasyon(dizi, 0, dizi.Length - 1);
                Console.WriteLine("----------------");
                Console.WriteLine(adet + " adet");
                Console.ReadKey();
            }
        }
    }


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen Frezmb Freser 9 Aralık 2018 Pazar 20:32
    5 Aralık 2018 Çarşamba 10:46

Tüm Yanıtlar

  • kombinasyon permutasyon adını veriyoruz ve yeterince örnek olduğuna inanıyorum.

    www.cihanyakar.com



    • Düzenleyen Cihan YakarMVP 5 Aralık 2018 Çarşamba 11:12 Murat bey e teşekkürler
    5 Aralık 2018 Çarşamba 08:41
  • Sorunuzun yanıtı permutasyon ile verilebilir.

        class Program
        {
            static int adet = 0;
    
            static void Degistir(ref string a, ref string b)
            {
                if (a == b)
                    return;
                string c = a;
                a = b;
                b = c;
            }
    
            static void Permutasyon(string[] dizi, int sol, int sag)
            {
                if (sol == sag)
                {
                    adet++;
                    Console.WriteLine(string.Join(",", dizi));
                }
                else
                    for (int i = sol; i <= sag; i++)
                    {
                        Degistir(ref dizi[sol], ref dizi[i]);
                        Permutasyon(dizi, sol + 1, sag);
                        Degistir(ref dizi[sol], ref dizi[i]);
                    }
            }
    
            static void Main(string[] args)
            {
                Console.Write("Dizi elemanlarını giriniz! (Her elemanı virgülle ayırın! Örneğin: 1,2,3,4):");
                string[] dizi = Console.ReadLine().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                Permutasyon(dizi, 0, dizi.Length - 1);
                Console.WriteLine("----------------");
                Console.WriteLine(adet + " adet");
                Console.ReadKey();
            }
        }
    }


    Sorunuzun yanıtı bu ise "Yanıt olarak işaretle"yerek siz de forumun işleyişine katkıda bulununuz...

    • Yanıt Olarak İşaretleyen Frezmb Freser 9 Aralık 2018 Pazar 20:32
    5 Aralık 2018 Çarşamba 10:46