Şimdi Ara

Fermat'ın Evini Bulamıyorum YARDIM

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
10
Cevap
0
Favori
150
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Problem:Fermat bir caddede ki evde oturmaktadır. Caddedeki evlerin numaraları 100 ile başlamaktadır. 1.ev 100 2.ev 101 3.ev 102....

    Fermat'ın evi öyle bir yerdedir ki, kendinden önceki evlerin numaralarının toplamı ile kendinden sonraki evlerin numaralarının toplamı eşittir.

    Soru 1: Fermat'ın evinin numarası kaçtır?
    Soru 2: Fermat'ın caddesinde kaç ev vardır?

    Ben C# üzerinden bunu yazdım ama evreka döngüsüne hiç takılamadı maalesef. Durumu göstersin diye döngü sonlarında falan ekrana yazdırdım değerleri. Ev sayısı normal gidiyor, ev sırası normal gidiyor, ev rakamında bir tuhaflık olabilir emin değilim ama gözüme bir şey çarpmadı. Bir de siz bakın. Ben birde dizileri kullanarak bulmayı deneyeceğim birkaç saat sonra.

    int oncekiler = 0;
    int sonrakiler = 0;
    int evrakami = 100;
    int evsayisi = 4;
    int evsirasi = 3;
    int yenij = 1;
    int yenik = 1;
    for (; evsayisi > 1; evsayisi++) // Ev Sayısı
    {
    Console.Write("Ev Sayisi:");
    Console.WriteLine(evsayisi);
    for (; evsirasi < evsayisi; evsirasi++) // Fermat ev sırası
    {
    for (; yenij < evsirasi; yenij++)
    {
    //evin sayısını öncekilere ekle
    oncekiler = oncekiler + evrakami;
    evrakami++;
    }
    yenij++;
    yenik = yenij;
    evrakami++;
    for (; yenik > evsirasi && yenik <= evsayisi; yenik++)
    {
    //evin sayısını sonrakilere ekle
    sonrakiler = sonrakiler + evrakami;
    evrakami++;

    }
    if (oncekiler-sonrakiler == 0)
    {
    for (int yap = 4; yap < 5;) // sonsuz evrekala
    {
    Console.WriteLine("evreka");
    }

    }
    else
    {
    yenij = 1;
    yenik = 1;
    evrakami = 100;
    Console.WriteLine(oncekiler-sonrakiler);

    }
    Console.Write("Ev Sirasi:");
    Console.WriteLine(evsirasi);
    }
    evsirasi = 3;

    }


    Edit: Buradaki yanlışım ev rakamı++'yı for döngüsünün içine eklemiş olmam. Çünkü for döngüsüne sokan eleman(yenij ve yenik) döngüden çıkarken arttırılıyor. Böylece ev rakamı 1 eksik kalıyor döngüden çıkarken.



    < Bu mesaj bu kişi tarafından değiştirildi Old Mac New Clip -- 17 Temmuz 2017; 13:47:24 >







  • Sizler de geliln belki yardımcı olabilirsiniz
  • Evreka evreka xD buldum kankiler. Dizi ile tekrar denedim ama onu hiç beceremedim. Bende en baştan tekrar yazıyım dedim ve bu sefer yukarıdaki dümbelekliğim gibi yeni j yeni k diye 2 değişken kullanıp işi zora sokacağıma 1 tane kullandım sayım olarak. kod hem daha düzgün oldu hemde çalışıyor. Henüz kontrol etmedim doğru mu yaptı diye yemek yedikten sonra kontrol edeceğim. Verdiği değerler bunlar;

    Ev Sayısı:144
    Ev Sırası:87
    ve doğal olarak kapı numarasıda 187 oluyor.

    Kodları kimse istemezse vermeyeceğim. Neden? Çünkü o kadar foruma konu falan açıyorum kimse ilgilenmiyor gibi görünüyor. Ne zaman konu açsam benden başka giren çıkan yok konuya. Eğer biri isterse vereceğim kodu, istemezse zaten kendi kendime yazıyorumdur burada.

    Edit:Elimle hesap makinesinde tek tek topladım 29 eksik çıktı. Bulamadım sanırım.
    Edit2:12255 olarak buluyor fermat'ın evinden önceki ve sonraki evdelerin toplamlarını. niye böyle yapayi ula bu program vış aney



    < Bu mesaj bu kişi tarafından değiştirildi Old Mac New Clip -- 17 Temmuz 2017; 14:0:40 >




  • mention attığın için sağol :)

    https://repl.it/J5Mb/1

    istediğin alt sınırı girebilirsin ve birden fazla sonuç veriyor. (doğru çözüm, bu şartları sağlayan sonsuz sayı vardır)
    bulduğu sonuçlardan birinin kanıtı:http://www.wolframalpha.com/input/?i=sum%5B7975...11276%5D+%3D+sum%5B100...7973%5D

    loop'ları kafamda canlandırmak için kağıda karalama falan da yaptım bir şeyler anlarsın belki buyur:
    https://i.hizliresim.com/r252Z3.jpg

    anlamadığın yer olursa sor kolay gelsin

    edit: çok deneme fırsatım olmadı internetim bayağı yavaş fotoğrafı upload etmem bile 2-3dk sürdü düşün
    yani hata olacağını sanmıyorum çünkü garip gurup bir sayı verdi ve baktım gerçekten şartları sağlıyor, doğru sonuçlar vereceğinden eminim.



    < Bu mesaj bu kişi tarafından değiştirildi VatandA.Ş. -- 17 Temmuz 2017; 15:55:22 >
    < Bu ileti mini sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: Microsoft Specialist

    mention attığın için sağol :)
    https://repl.it/J5Mb/1

    istediğin alt sınırı girebilirsin ve birden fazla sonuç veriyor. (doğru çözüm, bu şartları sağlayan sonsuz sayı vardır)
    bulduğu sonuçlardan birinin kanıtı:http://www.wolframalpha.com/input/?i=sum%5B7975...11276%5D+%3D+sum%5B100...7973%5D

    loop'ları kafamda canlandırmak için kağıda karalama falan da yaptım bir şeyler anlarsın belki buyur: https://i.hizliresim.com/r252Z3.jpg

    anlamadığın yer olursa sor kolay gelsin

    edit: çok deneme fırsatım olmadı internetim bayağı yavaş fotoğrafı upload etmem bile 2-3dk sürdü düşün
    yani hata olacağını sanmıyorum çünkü garip gurup bir sayı verdi ve baktım gerçekten şartları sağlıyor, doğru sonuçlar vereceğinden eminim.

    Çok sağ ol cevap verdiğin için ayrıca uğraştığın için. Ben programımı ilk eşitliği bulduğunda sonsuz döngüye sokuyordum. Şimdi senin dediklerini okudum ve sonsuz döngüyü kaldırdım. Dediğin gibi birden fazla sonuç çıkıyor(sonsuza kadar). Ben programın mantığını etkilemiyor diye yazmamıştım ama sayıların 3 basamak ile sınırlı olması gerekiyordu yani 1000'in üzerine çıkamıyor. Neyse ben de yapabilmiştim programı ama ev sırasını bir fazla çıkartmış bende. Sebebide sayım'a 1'den başlamam. sayım değerini 0 değilde 1 olarak tanıtmışım. benim kodumda bu

    for (int evsayisi = 3; evsayisi < 910; evsayisi++)
    {
    int evsirasi = 2;
    for (; evsirasi <= evsayisi; evsirasi++)
    {
    int oncekiler = 0;
    int sonrakiler = 0;
    int evrakami = 100;
    int sayim=0;
    for (; sayim < evsirasi; sayim++,evrakami++)
    {
    oncekiler = oncekiler + evrakami;
    }
    sayim++;
    evrakami++;
    for (; sayim > evsirasi && sayim <= evsayisi; sayim++,evrakami++)
    {
    sonrakiler = sonrakiler + evrakami;
    }
    if (sonrakiler-oncekiler==0)
    {

    Console.Write("Ev Sayisi:");
    Console.WriteLine(evsayisi);

    Console.Write("Ev Sirasi:");
    Console.WriteLine(evsirasi);

    Console.Write("Ev Numarası:");
    Console.WriteLine(evsirasi+99);

    Console.WriteLine(sonrakiler);

    }
    else
    {
    sayim = 1;
    evrakami = 100;
    }
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi Old Mac New Clip -- 17 Temmuz 2017; 16:10:27 >




  • quote:

    Orijinalden alıntı: Microsoft Specialist

    mention attığın için sağol :)
    https://repl.it/J5Mb/1

    istediğin alt sınırı girebilirsin ve birden fazla sonuç veriyor. (doğru çözüm, bu şartları sağlayan sonsuz sayı vardır)
    bulduğu sonuçlardan birinin kanıtı:http://www.wolframalpha.com/input/?i=sum%5B7975...11276%5D+%3D+sum%5B100...7973%5D

    loop'ları kafamda canlandırmak için kağıda karalama falan da yaptım bir şeyler anlarsın belki buyur: https://i.hizliresim.com/r252Z3.jpg

    anlamadığın yer olursa sor kolay gelsin

    edit: çok deneme fırsatım olmadı internetim bayağı yavaş fotoğrafı upload etmem bile 2-3dk sürdü düşün
    yani hata olacağını sanmıyorum çünkü garip gurup bir sayı verdi ve baktım gerçekten şartları sağlıyor, doğru sonuçlar vereceğinden eminim.

    Bulundu!
    Toplam ev say?s?: 144
    Son ev no: 243
    Ev no: 186
    Toplamlar: 12255


    senin programda küçük bir sorun var sanırım. toplam ev sayısını ve ev numarasınıda buluyor ama 1 fazla :D son ev numarasını doğru buluyor. gerçi emin değilim ya 10 kere editledim mesajı dur bir kontrol ediyim hangimizinki doğru



    < Bu mesaj bu kişi tarafından değiştirildi Old Mac New Clip -- 17 Temmuz 2017; 16:12:9 >




  • 100 numara 1. olduğu için *x-100+1*den 243 numara *243-100+1*den 144. oluyor.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: Microsoft Specialist

    100 numara 1. olduğu için *x-100+1*den 243 numara *243-100+1*den 144. oluyor.

    haklısın. bunu bulan programı da yazdım :D

    Seninkileri koydum doğru çıktı benimkiler yanlış çıktı.
    int evsayisi = Convert.ToInt32(Console.ReadLine()); 
    int evsirasi = Convert.ToInt32(Console.ReadLine());
    int bas = 100;
    int toplam = 0;
    int i=1;
    int z = 1;
    int stoplam = 0;
    for (; i < evsirasi; i++)
    {
    toplam = toplam + bas;
    bas++;
    //ikinci eve geldi
    Console.WriteLine(bas);
    }
    z = i;
    bas++;
    z++;
    Console.Write("toplam:");
    Console.WriteLine(toplam);
    for (; z > evsirasi && z <=evsayisi; z++)
    {
    stoplam = stoplam + bas;
    bas++;
    }
    Console.Write("stoplam:");
    Console.WriteLine(stoplam);


    kendi kodumu düzelttim doğru halide bu;
    for (int evsayisi = 3; evsayisi < 910; evsayisi++) 
    {
    int evsirasi = 1;
    for (; evsirasi <= evsayisi; evsirasi++)
    {
    int oncekiler = 0;
    int sonrakiler = 0;
    int evrakami = 100;
    int sayim = 1;
    for (; sayim < evsirasi; sayim++, evrakami++)
    {
    oncekiler = oncekiler + evrakami;
    }

    sayim++;
    evrakami++;

    for (; sayim <= evsayisi; sayim++, evrakami++)
    {
    sonrakiler = sonrakiler + evrakami;
    }
    if (sonrakiler - oncekiler == 0)
    {

    Console.Write("Ev Sayisi:");
    Console.WriteLine(evsayisi);
    Console.Write("Ev Sirasi:");
    Console.WriteLine(evsirasi);
    Console.Write("Ev Numarası:");
    Console.WriteLine(evsirasi+99);

    Console.WriteLine(sonrakiler);

    }
    else
    {
    sayim = 1;
    evrakami = 100;
    }
    }
    }


    benim kodum ilk yaptığımda doğruymuş zaten. ama kendim hesaplarken yanlış hesaplamışım. sonra kodu da bozmuşum :D neyse sonuçta bulduk. teşekkürler cevapların için




  • Evet doğru olduğunu sonradan fark ettim.



    Bu arada değişken isimlerini daha açıklayıcı seç derim. Okuması ve anlaması kolay olur.



    Ve benim attığımda bir sorun yoksa onu kullan derim çok büyük bir fark olmasa da daha verimli olur. Sende daha fazla değişken var, kontrol akışı daha karışık, iç içe for dongusu var, ara işlemler var...



    Ayrıca mesela if(sonrakiler - oncekiler == 0) demişsin buradaki çıkartma işlemi gereksiz, direkt birbirine eşit mi diye kontrol et.



    Bu dediklerim boyle basit bir örnek için çok performans farkı yaratmayabilir belki ama ileride daha büyük projelerde kullanırken dikkat etmen gerekir.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: Microsoft Specialist

    Evet doğru olduğunu sonradan fark ettim.



    Bu arada değişken isimlerini daha açıklayıcı seç derim. Okuması ve anlaması kolay olur.



    Ve benim attığımda bir sorun yoksa onu kullan derim çok büyük bir fark olmasa da daha verimli olur. Sende daha fazla değişken var, kontrol akışı daha karışık, iç içe for dongusu var, ara işlemler var...



    Ayrıca mesela if(sonrakiler - oncekiler == 0) demişsin buradaki çıkartma işlemi gereksiz, direkt birbirine eşit mi diye kontrol et.



    Bu dediklerim boyle basit bir örnek için çok performans farkı yaratmayabilir belki ama ileride daha büyük projelerde kullanırken dikkat etmen gerekir.

    beyin bedava haklısın gerçekten o if yüzünden yerlere yatıyorum şimdi

    hem diyene bak kodunda bir küçük n var bir büyük N var :D



    < Bu mesaj bu kişi tarafından değiştirildi Old Mac New Clip -- 17 Temmuz 2017; 17:53:30 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.