Forum: D Programlama Dili RSS
Toplamları Eşit Olan Sayıların İndexinin Bulunması
kerdemdemir #1
Üye Eyl 2013 tarihinden beri · 53 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Toplamları Eşit Olan Sayıların İndexinin Bulunması
Elimizde; "1 5 7 4 4 3" gibi bir dizi olduğunu varsayalım
Burda 1-7,5-3 ve 4-4 ün toplamı 8 ediyor. Soruda çiftlerin toplamının eşit olduğu sayıların indekslerini yazdırmamız isteniyor.

Örneğin yukardaki dizi için doğru cevap:

1 3              (1 ve 7'nin indeksleri)
6 2              (3 ve 5'nin indeksleri)
4 5              (4 ve 4'nin indeksleri)

Ben bu soruyu D nin çok beğendiğim topNIndex metodu yardımı ile çözdüm. Eğer eşit olan sayı çiftleri varsa en büyük+en küçük, 2. en büyük + 2. en küçük olduğunu gözlemliyerek algoritmamı şöyle yazdım :

    const kardSayisi = stdin.readln.strip.to!size_t;
    auto numaralar = stdin.readln.strip.split().map!(a => to!int(a)).array();
    int[] siralanmisIndexDizisi = new int[kardSayisi];
    topNIndex(numaralar, siralanmisIndexDizisi, SortOutput.yes);
    for ( int i = 0; i < kardSayisi/2; i++ )
    {
        writeln( min(siralanmisIndexDizisi[i], siralanmisIndexDizisi[ kardSayisi - 1 - i ]) + 1, " ", max( siralanmisIndexDizisi[i], siralanmisIndexDizisi[ kardSayisi - 1 - i ] ) + 1 );
    }

Bir yorumunuz olurmu, mesela şu topNIndex metoduna new ile bir array göndermek pek hoşuma gitmiyor bir çözümünüz varmıdır? Sorunun tamamı "http://codeforces.com/contest/701/problem/A"'dan görünebilir.

Sevgiler herkese
Erdemdem
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4389 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Son döngü için belirli bir nedeni olmadan benim aklıma şöyle bir şey geldi:
    while (!siralanmisIndexDizisi.empty) {
        writefln("%s %s",
                 siralanmisIndexDizisi.front + 1,
                 siralanmisIndexDizisi.back + 1);
 
        siralanmisIndexDizisi.popFront();
        siralanmisIndexDizisi.popBack();
    }
siralanmisIndexDizisi için yer ayırmak zorundayız çünkü topNIndex, üzerinde çalışmak için o kadar yer gerektiriyor.

Ali
kerdemdemir #3
Üye Eyl 2013 tarihinden beri · 53 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ali Hocam Selam

Bu topNIndex şöyle bir dizide " 10 10 10 10 " şöyle bir sonuç üretti " 2 1 3 4 " fakat sorunun istediği " 1 2 3 4"
o nedenle max-min methodlarını eklemek durumunda kaldım.

Çok sağol gösterdiğin yöntem için.

Erdemdem
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4389 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Soru 10 10 10 10 için herşey kabul edilir diyor: "any distribution is acceptable". Ama önemli değil, seninkini de söylüyor olabilirdi. :)

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-03-23, 11:24:15 (UTC -07:00)