2016-03-19 26 views
0

Bir sorum var. örneğin,En yaygın ortak bölüme göre sıralama dizisi

bool cmp(int a, int b) 
{ 
    return __gcd(a, b) > 1; 
} 

ve: Bu karşılaştırıcı yazmak

Ben bu sayıları varsa:

2 5 6 7 8 12 15 19 20 

kodum çıkışları:

20 15 12 8 6 2 5 7 19 

tamam ..

ancak örnek olarak:

1 2 3 4 5 6 7 8 9 

benim kod çıkışları

1 2 3 4 5 6 7 8 9 

Bunu nasıl yapabilirim? sonuçları bilinemez bu yüzden,

9 6 3 (...) 
+0

'dan geçirmiyor Muhtemelen 'std :: kullanıyorsunuz rt'? Bu işe yaramaz. 'std :: sort', normal sayılar gibi sıralamak gerektiği anlamına gelen [* sıkı zayıf sipariş *] (https://www.sgi.com/tech/stl/StrictWeakOrdering.html) gerektirir. Örneğin. '3 <4', yani' (4 <3) '. Ama 'gcd' * değişmez * gcd (a, b) == gcd (b, a)' - her iki durumda da aynı şekilde çalışır, bu nedenle (ve diğerleri), 'cmp' yapamazsınız sıralama için duyu. Olduğu gibi, hangi düzeye ulaşmaya çalıştığınızdan emin değilim. – BoBTFish

+0

Peki, nasıl sıralayabilirim? – JanKo

+3

Dürüst olmak gerekirse, hangi düzene ulaşmaya çalıştığınızdan emin değilim. Bir elemanın diğerinden “daha ​​büyük” olduğu zaman, önemsiz olmayan bir gcd'ye sahip olsaydı, bir elemanın diğerinden “daha ​​büyük” olmasının mantıklı olduğunu göremiyorum. Bu bir programlama hatası değil, matematik hatası. Gerçekten ne istediğini düşün. Aslında mantıklı mı? – BoBTFish

cevap

2

Kişisel karşılaştırıcı kurmak değil strict weak ordering:

bu sekans

böyle bir şey olması gerekir.

aşağıdaki doğrudur emin olmalısınız doğru karşılaştırıcı yapmak için:

cmp(a, a) == false - senin karşılaştırıcı cmp(2, 2)

cmp(a, b) == true → cmp(b, a) == false üzerine testini geçemezse - senin karşılaştırıcı cmp(2, 4)

üzerine testini geçemezse

cmp(a, b) == true and cmp(b, c) == true → cmp(a, c) == true - karşılaştırıcınız testi cmp(2, 6) and cmp(6, 3)

+0

Bana yardım edebilir misin? – JanKo

+0

@JanKo Sıralama ölçütlerinizi tekrar düşünmelisiniz. Sıralı dizi neden 9, 6, 3 ile başlamalı? Neden 8, 4, 2' değil? Neden 3, 6, 9 ', '6, 3, 9' veya diğer 3 kombinasyon değil? Sıralamadan sonra 2, 4 'sayıları hangi sıraya göre yerleştirilmelidir? Niye ya? Göreceksiniz ki, ortak bir bölüme sahip olmak kesin bir düzen oluşturmak için yeterli değildir ve ek kriterler vermek zorunda kalacaksınız. –

+0

gerçeği kayıtsız bir dizi oluşturdu, gcd – JanKo