Umut D.

Umut D.

Powered by Jekyll & Github

  • Coding-Challenges

  • Soru

    Programcıya belirli ve sabit bir artış sayısı olan liste (girilenListe) veriliyor. Pozitif sayılardan oluşan listenin, en az 3 sayıdan oluştuğu ve eksik sayının asla ilk ve son sayılar olmayacağı belirtiliyor. Programcıdan ise mevcut listedeki eksik sayıyı programlamatik olarak bulması isteniyor.

    Örnek

    Girdi Çıktı
    girilenListe: 1, 3, 5, 7, 11 Eksik Sayı: 9
    girilenListe: 5, 10, 20 Eksik Sayı: 15

    Çözüm - C#

    using System;
    using System.Collections.Generic;
    using System.Linq;
     
    class Program
    {
        static void Main()
        {
            // Kullanıcı tarafından girilen değerlerin bulunduğu liste
            List<int> girilenListe = new List<int> {5, 10, 20};
     
            List<int> duzenliListe = new List<int>();
            int[] sayi = new int[girilenListe.Count];
     
            // Girilen değerler en az 3 olmalı ki fark ve eksik sayı bulunsun
            if (girilenListe.Count > 2)
            {
                // Listenin sonundaki iki değere göre farkı bul
                int fark = girilenListe[girilenListe.Count - 1] - girilenListe[girilenListe.Count - 2];
     
                // Mevcut farka göre, artışın düzenli bir şekilde gerçekleştiği düzenli listeyi oluştur
                for (int i = girilenListe[0]; i < girilenListe[girilenListe.Count - 1]; i += fark)
                    duzenliListe.Add(i);
     
                // Düzenli liste ile Girilen listeyi karşılaştırıp eksik sayıyı bul
                sayi = duzenliListe.Except(girilenListe).ToArray();
            }
     
            Console.WriteLine(sayi[0]);
     
            Console.Read();
        }
    }
    

    Çözüm - Java

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
     
    public class Main {
     
        public static void main(String[] args) {
            // Kullanıcı tarafından girilen değerlerin bulunduğu liste
            List<Integer> girilenListe = Arrays.asList(5,10,20);
            List<Integer> duzenliListe = new ArrayList<>();
     
            // Girilen değerler en az 3 olmalı ki fark ve eksik sayı bulunsun
            if (girilenListe.size() > 2)
            {
                // Listenin sonundaki iki değere göre farkı bul
                int fark = girilenListe.get(girilenListe.size() - 1) - girilenListe.get(girilenListe.size() - 2);
     
                // Mevcut farka göre, artışın düzenli bir şekilde gerçekleştiği düzenli listeyi oluştur
                for (int i = girilenListe.get(0); i < girilenListe.get(girilenListe.size() - 1); i += fark)
                    duzenliListe.add(i);
     
                // Düzenli listeden, girilen listedeki değerleri sil
                duzenliListe.removeAll(girilenListe);
            }
     
            // Düzenli listede kalan son değeri getir
            System.out.println(duzenliListe.get(0));
        }
    }