Şans sistemi faizlərlə

Salam. Hazırda realizasiyası JAVA-da maraqlı olsa da, məncə istənilən proqramlaşdırma dilində buna uyğun alqoritm göstərsəniz, mənə aydın olar. Çoxunuz kompüter, smartfon və s. sistemlərdə oyunlar oynamısınız. Belə bir hissə var. Məsələn: Yol ilə gedirsiniz, sizin qarşınıza 10% şans var ki, bonus qutusu çıxacaq, 1% şans var ki, bu qutudan +1 can, 2 % şansla 250 qızıl, 5% şansla paltar, 70% şansla 1qızıl, 0.01% şansla isə 250 qızıl + paltar çıxa bilər. Maraqlı hissə də budur. Şans sistemini necə qurmaq olar? Əslində fikrim var, ancaq çox kustar üsuldur. Yəqin ki, güləcəksiniz. Ancaq heç bu da işimə yaramır əslində:
Məsələn: 5% üçün
int[] a={2,14,66,72,86};
Random() la rəqəm alırıq 1-100 arası, əgər alınan rəqəm a massivində varsa, bunu 5 % lik şans saymaq olar. Ancaq faiz şansları çox olduqda gərək mən 50%ə qədər bütün şanslar üçün belə sistem qurum. Bu zaman gərək elə edim ki, bir massivdə olan rəqəmlər başqasında olmasın. Bu isə mümkün deyil heç bir cəhətdən. Zəhmət olmasa, kömək edin. Öncədən təşəkkür edirəm.


Yadda saxlama
Kateqoriya: Sual . Qısa keçid.

Verilmiş cavablar və yazılan şərhlər (15 cavab var)

(15:02, 20/11/2012 ) #22954

Salam. 1..100 random qiymətlər alırsa
if else və ya case ilə yoxlayırıq
Əgər həmin ədəd

<=5 isə onda 5%lik ehtimal,
>5 və <=45 isə 40%lik ehtimal,
və >45 isə 55%lik ehtimal hadisələrini reallaşdırmaq olar.
Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (15:10, 20/11/2012 ) #22955

    Bax qutudan faizlərdə yazdıqlarımdan biri çıxmalıdır. əgər 7 qaytarsa Random() o zaman mən hansı bonusu seçməliyəm? 5dən böyük 45=< dir 7. Ancaq bu aralığa başqa faizlər də daxildir. Mənə isə lazımdır ki, düşən rəqəm faizi təyin etsin, o faizlə mən bonusu təyin edəcəm. Bəlkə də, düzgün qurmuram sistemi beynimdə.

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(15:16, 20/11/2012 ) #22956

Yoox. 1-dən 100-ə olan random ədədlərlə faizin heç bir əlaqəsi yoxdur.
Sən bölgünü aparırsan və bölgünün uzunluğu faizi təyin eidr. Daha random ədəd 93-dürsə, bunun 93%lə əlaqəsi yox. 93 hansı intervaldadırsa o faizlə əlaqəsi var. Formal yazım:

$tes=random(1,100);

if ($tes<=10) {bonusqutusu();}
elseif($tes>10 and $tes<=11) {plusbircan();}
elseif($tes>11 and $tes<=13) {250qizil();}
elseif($tes>13 and $tes<=18) {paltar();}
elseif($tes>18 and $tes<=88) {birqizil();}

və.s. 0.01% tipli faizlər də varsa o halda bölgü random(1,10 000) arası aparılmalıdır ki, diskret addım 1 yox, 0.01 olsun

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (15:21, 20/11/2012 ) #22957

    iş ondadır ki, 1-100 arası düşən rəqəmin şansı elə 1% dir. Yəni ki, 11 rəqəminin düşmə ehtimalı artıq 1%dir elə. Gərək bunu mövzunun özündə qeyd edərdim. Yəni sizin variantı istifadə etsək, buna “Koreya randomu” deyirlər, bir çox Koreya istehsalı olan oyunlarda rast gəlinir. Mən bu səbəbdən, 5% lik şansı təyin edən massivdə 5 ədəd göstərmişəm.

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (15:25, 20/11/2012 ) #22958

      Fikir tam çatmadı bəlkə ona görə anlaşılmazlıq var nəsə.
      Amma tam əmin ola bilərsən ki “Belə bir hissə var. Məsələn: Yol ilə gedirsiniz, sizin qarşınıza 10% şans var ki, bonus qutusu çıxacaq, 1% şans var ki, bu qutudan +1 can, 2 % şansla 250 qızıl, 5% şansla paltar, 70% şansla 1qızıl, 0.01% şansla isə 250 qızıl + paltar çıxa bilər.” Bunun həlli mən yazandır. Şans-ehtimal işləri ilə çox məşğul oluram elmi işlərdə 🙂 Nəinki sadə random, hətta loqarifmik ifadələrlə olan mürəkkəb ehtimal paylanmaları ilə(çayın daşması, əhalinin artımı və.s. ehtimallar) Yəni məsələ tam aydın olsa, əminəm ki izahın verə bilərəm 🙂

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(15:46, 20/11/2012 ) #22959

Yaxşı belə deyək:
Ümumi oyunda 1% dən tutmuş 100%ə qədər şanslar ehtimalı var. Mən necə əmin ola bilərəm ki, random() 22 qaytarıbsa bu 33%-lik şansdır. Çünki Random(1,101) versək min dəfəlik iterasiyaya o zaman təxmini 10 dəfə 1, 10 dəfə 2, 10 dəfə 3 , …. , 10 dəfə 100 düşəcək. Belədir ki, Random()-un 22 qaytarmağı (1və 100 arası rəqəmlərdən) cəmi 1%-dir. O zaman 22 olursa random() və bu 22-ni 33%-lik şansa aid etməyim düzgün deyil axı.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (15:55, 20/11/2012 ) #22960

    Axı niyə 1000 dəfəlik təkrar cəhdlər edirsən? Bunu anlamadım.
    Random(a,b)-də hər bir integerin düşmə ehtimalı 1/(b-a+1)-dır. Yəni istər 22 olsun, istər 99. Bizə lazım olan ehtimalları intervalın uzunluğu ilə təyin edirik. 22 qaytarıbsa bu 33%-lik şansdır ifadəsi yanlışdır.
    Biz özümüz əgər təyin etsən ki,
    if a böyükdür bərabərdir 1 və a kiçikdir 33, onda 33%lik hadisə baş versin – Bəli o halda random(1,100)-ün qiyməti 1-dən 33-dək istənilən qiyməti aldıqda 33%-lik ehtimallı hadisə baş verir.
    Çünki 1-dən 33-ə 33 eyniehtimallı mümkün hadisə var. Və bunlar cəmlənir. Düstura görə alırıq: 33*(1/(100-1+1))=33%.
    22 də o intervala daxildir deyə hər dəfə random(1,100)= 22 olsa, və ya 20, 30, 32 və.s. olsa(hansı ki kiçikdirlər 33-dən), deməli 33%lik hadisə baş verir

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (16:01, 20/11/2012 ) #22961

      Eləyə qalsa onda 5 düşdüsə 5% lik şansa bərabər edək, 34 düşsə 34%? Çünki 33 düşübsə o zaman bu 31%ə daxil olmayacaq,32% daxil olmayacaq çünki 33% bunlardan böyükdür, 33-ə bərabər edək? Beynim qarışdı lap 🙂 Deitel-in kitabından bir kod parçası göstərim. 6 üzlü zər atılır, zərin hər üzünün düşmə sayını göstərir.

      import java.util.Random;
      
      public class RollDie {
      	public static void main(String[] args) {
      		Random randomNumbers = new Random(); // random number generator
      
      		int frequency1 = 0; // maintains count of 1s rolled
      		int frequency2 = 0; // count of 2s rolled
      		int frequency3 = 0; // count of 3s rolled
      		int frequency4 = 0; // count of 4s rolled
      		int frequency5 = 0; // count of 5s rolled
      		int frequency6 = 0; // count of 6s rolled
      		int face; // most recently rolled value
      
      		// tally counts for 6,000,000 rolls of a die
      		for (int roll = 1; roll <= 6000000; roll++) {
      			face = 1 + randomNumbers.nextInt( 6 ); // number from 1 to 6
      			// determine roll value 1-6 and increment appropriate counter
      			switch (face) {
      			case 1:
      				++frequency1; // increment the 1s counter
      				break;
      			case 2:
      				++frequency2; // increment the 2s counter
      				break;
      			case 3:
      				++frequency3; // increment the 3s counter
      				break;
      			case 4:
      				++frequency4; // increment the 4s counter
      				break;
      			case 5:
      				++frequency5; // increment the 5s counter
      				break;
      			case 6:
      				++frequency6; // increment the 6s counter
      				break; // optional at end of switch
      			} // end switch
      		} // end for
      
      		System.out.println("Face\tFrequency"); // output headers
      		System.out.printf("1\t%d\n2\t%d\n3\t%d\n4\t%d\n5\t%d\n6\t%d\n",
      				frequency1, frequency2, frequency3, frequency4, frequency5,
      				frequency6);
      	} // end main
      } // end class RollDie
      

      2 dəfə proqramı run edək. Nəticələr:
      Face Frequency
      1 999501
      2 1000412
      3 998262
      4 1000820
      5 1002245
      6 998760

      2-ci dəfə
      Face Frequency
      1 999647
      2 999557
      3 999571
      4 1000376
      5 1000701
      6 1000148

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (20:54, 20/11/2012 ) #22982

      Ikinci şərhimdə yazmışdım ki 5 klə 5%in 35 ilə 35%in bem bir əlaqəsi yoxdur 🙂 ehtimal intervalla hesablanır. Əslində məsələ sadə şeydir, nədənsə təsvirini çətun verirsən

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(16:11, 20/11/2012 ) #22962

Şansların-ehtimalların cəmi 100% olmalıdır, 1-dən 100%-ə qədər ayrı-ayrı şans müəyyən edə bilməzsən

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(16:15, 20/11/2012 ) #22964

1. Əvvəlcə yalnız tam faizlərə baxaq:
10% – bq, 1% – can, 2% – 205qizil, 5% – paltar, 70% 1qizil
Bir massiv götürürsünüz [ ‘bq’ {10 dəfə təkrarla}, ‘can’, ‘205qizil’, ‘205qizil’, ‘paltar'{5 dəfə təkrarla}, ‘1izil'{100 dəfə təkrarlar} ]

İndi bu array-dan random bir element seçin bu sizin tələblərə uyğun element olacaq.

2. Tam sizin tələblərlər, yəni onluq faiz də daxil olmaqla.

Bunun üçün əvvəlcə bütün faiz göstərən ədədlərinizi 100-ə vurun(0.01 i tam ədədə gətirmək üçün) sonra isə birinci bənddə dediyimi tətbiq edin

Uğurlar!

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (16:19, 20/11/2012 ) #22966

    Elə indicə buna oxşar bir variant fikirləşirdik. Ancaq bu mən istəyənə çox yaxın bir ideyadır. Təşəkkür edirəm. Bircə sual qalır.Belə çıxır ki massivin bu misalda təxmini 80+ elementi olacaq. Bu yaddaşı zəbt etməyə gətirib çıxarmaz ki bir massivlə?

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (16:29, 20/11/2012 ) #22968

      Java -da səhv eləmirəmsə short integer yaddaşda 2 byte yer tutur. Hətta məncə bu məsələyə byte-da bəs edər hansıki 1 byte yaddaş tutur. Yəniki misal üçün siz byte array-ı düzəldə bilərsiniz və hər bir hədiyyəni bir rəqəmlə işarələyə bilərsiniz. Array da isə string-i yox bu rəqəmi təkrar edərsiniz bu zaman misal üçün arrayın 512 elementi olsa cəmi 1kb yaddaş istifadə etmiş olursunuz. Yəniki heç bir problem olmuyacaq, əgər kompüter üçün yazılırsa proqram elə stringləri təkrarlamaqda problem deyil.

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(17:05, 20/11/2012 ) #22972

Necə deyərlər proof test 🙂

import java.util.Random;

public class Main {
	public static int[] array;
	public static void main(String[] args) {
		array=new int[132];
		for(int i=0;i<10;i++){//10%
			array[i]=1;
		}
		for(int i=10;i<40;i++){//30%
			array[i]=2;
		}
		for(int i=40;i<100;i++){//60%
			array[i]=3;
		}
		Random randomNumbers = new Random(); // random number generator

		int frequency1 = 0; // maintains count of 1s rolled
		int frequency2 = 0; // count of 2s rolled
		int frequency3 = 0; // count of 3s rolled
		int face; // most recently rolled value

		// tally counts for 1,000,000 rolls of a die
		for (int roll = 0; roll < 1000000; roll++) {
			face = randomNumbers.nextInt(99); // number from 1 to 112
			// determine roll value 1-6 and increment appropriate counter
			switch (array[face]) {
			case 1:
				++frequency1; // increment the 1s counter
				break;
			case 2:
				++frequency2; // increment the 2s counter
				break;
			case 3:
				++frequency3; // increment the 3s counter
				break;
			} // end switch
		} // end for

		System.out.println("Face\tFrequency"); // output headers
		System.out.printf("1\t%d\n2\t%d\n3\t%d",
				frequency1, frequency2, frequency3);
	}
}

1dəfə run:
Face Frequency
1 101700
2 302895
3 595405

2-ci run
Face Frequency
1 100909
2 303506
3 595585

3-cü run
Face Frequency
1 100325
2 303985
3 595690

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(17:07, 20/11/2012 ) #22973

array=new int[132]; yox array=new int[100]; olacaq əslində. Öncəki testdən qalıb 132. ÜMumilikdə 3 elementdir. 1ci bonusun düşmə faizi 10%,2cinin 30%,3cünün 60%. Nəticəni də elə alırıq təxmini.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

Bu suala aid öz sualım var:
Sual verin
Bu suala cavab vermək istəyirəm:
Cavab verin

Cavab verin


Cavab yazmaq üçün lütfən sağ sütundan və ya buradan hesaba daxil olun.

Üzvlər üçün giriş

Qeydiyyat

Elan qutusu

Son cavablar və şərhlər

E. Hacı cavab verdi - Ödənişləri VÖEN-ə bağlı bank hesabına almaq məcburidir? (1 gün əvvəl)

E. Hacı cavab verdi - İnformatika muellimi yoxsa sistem administratorluğu? (1 gün əvvəl)

Jorpy cavab verdi - Ödənişləri VÖEN-ə bağlı bank hesabına almaq məcburidir? (1 gün əvvəl)

E. Hacı cavab verdi - Ödənişləri VÖEN-ə bağlı bank hesabına almaq məcburidir? (1 gün əvvəl)

Software Developer cavab verdi - Eynicinsli mal dedikdə nə nəzərdə tutulur? (3 gün əvvəl)

Jorpy cavab verdi - İnformatika muellimi yoxsa sistem administratorluğu? (3 gün əvvəl)

E. Hacı cavab verdi - Kriptovalyuta köçürmələrini VÖEN-ə bağlı bank kartına almağım vacibdir? (3 gün əvvəl)

Software Developer cavab verdi - Sifarişlərin çatdırılması üsulu (3 gün əvvəl)

Jorpy cavab verdi - Ödənişin təsdilənməsini necə öyrənə bilərəm? (4 gün əvvəl)

rdrobert cavab verdi - Ödənişin təsdilənməsini necə öyrənə bilərəm? (4 gün əvvəl)

rdrobert cavab verdi - canada ve america saytlarindan sifaris (4 gün əvvəl)

rdrobert cavab verdi - Sifarişlərin çatdırılması üsulu (4 gün əvvəl)

rdrobert cavab verdi - Kondisioner mis borusu qiyməti (4 gün əvvəl)

rdrobert cavab verdi - 0-dan alman dili öyrənmək (4 gün əvvəl)

E. Hacı cavab verdi - Trendyoldan 6 ədədd corab sifariş etsəm vergi ödəməliyəm? (7 gün əvvəl)

Software Developer - 615 xal

E. Hacı - 607 xal

Onar Alili - 526 xal

Dilsuz - 448 xal

Cabbarov Sübhan - 434 xal

Maqa - 346 xal

Ruslan Butdayev - 328 xal

Namiq Bəndəli - 297 xal

U.Tarlan - 244 xal

Meherremoff - 234 xal

Sistemə daxil olmuş 23250 sualdan 92%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

E-Haci.net istehsalı. © 2010-2024