import random
import time
valid = 0
invalid = 0
n = 100_000_000
start = time.perf_counter()
for i in range(n):
a = random.uniform(0.0, 10.0)
b = random.uniform(0.0, 10.0 - a)
c = 10.0 - a - b
if a + b > c and abs(a - b) < c:
valid += 1
else:
invalid += 1
print(valid / (valid + invalid))
print(time.perf_counter() - start)
Üçgen oluşturmak için bir kural vardır. Bu kural: Bir kenar uzunluğu; diğer iki kenar uzunluğunun toplamından küçük, farkından büyük olması gerekir.
3-4-5 üçgenini ele alalım.
3 birim uzunluğundaki kenar 4+5 = 9'dan küçük, 5-4 = 1'den büyüktür.
4 birim uzunluğundaki kenar 3+5 =8'den küçük, 5-3 = 2'den büyüktür.
5 birim uzunluğundaki kenar 3+4 = 7'den küçük, 4-3 = 1'den büyüktür.
Bundan dolayı 3-4-5 uzunluğundaki parçalardan bir üçgen oluşturulabilir.
10 cm uzunluğundaki çubuğun bölünebileceği tüm durumlarda bu şartın sağlanma olasılığına bakmanız gerekmekte.
Direkt olarak kodu yazmaktansa mantığını aktarıp sizin üstüne düşünerek yazmanızın daha iyi olacağını düşünüyorum.
import random
import time
valid = 0
invalid = 0
n = 100_000_000
start = time.perf_counter()
for i in range(n):
a = random.uniform(0.0, 10.0)
b = random.uniform(0.0, 10.0 - a)
c = 10.0 - a - b
if a + b > c and abs(a - b) < c:
valid += 1
else:
invalid += 1
print(valid / (valid + invalid))
print(time.perf_counter() - start)
Cevabınız için teşekkür ederim. Gerçekten acemiyim bu konularda umarım kodun devamını yazabilirim .Rastgele değerler kullanılacağı için örnek uzayını artırmak asıl sonuca yaklaştırsa da tam olarak ulaşmamış olursunuz. Değerden çok neden öyle olduğu daha önemli bence. Bu şekilde yazdım ben. Yine de yaklaştığı değer doğru değil. Nedenini de sen bul.
Kodsuz çözüm: Probability of cutting a rope into three pieces such that the sides form a triangle - GeeksforGeeks
Kod:import random import time valid = 0 invalid = 0 n = 100_000_000 start = time.perf_counter() for i in range(n): a = random.uniform(0.0, 10.0) b = random.uniform(0.0, 10.0 - a) c = 10.0 - a - b if a + b > c and abs(a - b) < c: valid += 1 else: invalid += 1 print(valid / (valid + invalid)) print(time.perf_counter() - start)
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.