تنفيذ rand3() باستخدام rand2()
بالنظر إلى دالة rand2() التي تُرجع 0 أو 1 باحتمال متساوٍ، قم بتنفيذ rand3() باستخدام rand2() التي تُرجع 0 1 أو 2 باحتمال متساوٍ. تقليل عدد الاستدعاءات إلى طريقة rand2(). لا يُسمح أيضًا باستخدام أي وظيفة مكتبة أخرى وحساب الفاصلة العائمة.
الفكرة هي استخدام التعبير 2 * راند2 () + راند2 () . تقوم بإرجاع 0 1 2 3 باحتمال متساوي. ولجعله يعود 0 1 2 باحتمال متساوٍ، نحذف الحدث غير المرغوب فيه 3.
وفيما يلي تنفيذ الفكرة المذكورة أعلاه -
// C++ Program to print 0 1 or 2 with equal // probability #include using namespace std ; // Random Function to that returns 0 or 1 with // equal probability int rand2 () { // rand() function will generate odd or even // number with equal probability. If rand() // generates odd number the function will // return 1 else it will return 0. return rand () & 1 ; } // Random Function to that returns 0 1 or 2 with // equal probability 1 with 75% int rand3 () { // returns 0 1 2 or 3 with 25% probability int r = 2 * rand2 () + rand2 (); if ( r < 3 ) return r ; return rand3 (); } // Driver code to test above functions int main () { // Initialize random number generator srand ( time ( NULL )); for ( int i = 0 ; i < 100 ; i ++ ) cout < < rand3 (); return 0 ; }
Java // Java Program to print 0 1 or 2 with equal // probability import java.util.Random ; class GFG { // Random Function to that returns 0 or 1 with // equal probability static int rand2 () { // rand() function will generate odd or even // number with equal probability. If rand() // generates odd number the function will // return 1 else it will return 0. Random rand = new Random (); return ( rand . nextInt () & 1 ); } // Random Function to that returns 0 1 or 2 with // equal probability 1 with 75% static int rand3 () { // returns 0 1 2 or 3 with 25% probability int r = 2 * rand2 () + rand2 (); if ( r < 3 ) return r ; return rand3 (); } // Driver code public static void main ( String [] args ) { for ( int i = 0 ; i < 100 ; i ++ ) System . out . print ( rand3 ()); } } // This code is contributed by divyesh072019.
Python3 # Python3 Program to print 0 1 or 2 with equal # Probability import random # Random Function to that returns 0 or 1 with # equal probability def rand2 (): # randint(0100) function will generate odd or even # number [1100] with equal probability. If rand() # generates odd number the function will # return 1 else it will return 0 tmp = random . randint ( 1 100 ) return tmp % 2 # Random Function to that returns 0 1 or 2 with # equal probability 1 with 75% def rand3 (): # returns 0 1 2 or 3 with 25% probability r = 2 * rand2 () + rand2 () if r < 3 : return r return rand3 () # Driver code to test above functions if __name__ == '__main__' : for i in range ( 100 ): print ( rand3 () end = '' ) #This code is contributed by sahilshelangia
C# // C# Program to print 0 1 or 2 with equal // probability using System ; class GFG { // Random Function to that returns 0 or 1 with // equal probability static int rand2 () { // rand() function will generate odd or even // number with equal probability. If rand() // generates odd number the function will // return 1 else it will return 0. Random rand = new Random (); return ( rand . Next () & 1 ); } // Random Function to that returns 0 1 or 2 with // equal probability 1 with 75% static int rand3 () { // returns 0 1 2 or 3 with 25% probability int r = 2 * rand2 () + rand2 (); if ( r < 3 ) return r ; return rand3 (); } // Driver code static void Main () { for ( int i = 0 ; i < 100 ; i ++ ) Console . Write ( rand3 ()); } } // This code is contributed by divyeshrabadiya07.
PHP // PHP Program to print 0 1 or // 2 with equal probability // Random Function to that // returns 0 or 1 with // equal probability function rand2 () { // rand() function will generate // odd or even number with equal // probability. If rand() generates // odd number the function will // return 1 else it will return 0. return rand () & 1 ; } // Random Function to that // returns 0 1 or 2 with // equal probability 1 with 75% function rand3 () { // returns 0 1 2 or 3 // with 25% probability $r = 2 * rand2 () + rand2 (); if ( $r < 3 ) return $r ; return rand3 (); } // Driver Code // Initialize random // number generator srand ( time ( NULL )); for ( $i = 0 ; $i < 100 ; $i ++ ) echo rand3 (); // This code is contributed by aj_36 ?>
JavaScript < script > // Javascript program to print 0 1 or 2 with equal // probability // Random Function to that returns 0 or 1 with // equal probability function rand2 () { // Math.random()*2 function generates // 0 and 1 with equal probability return Math . floor ( Math . random () * 2 ); } // Random Function to that returns 0 1 or 2 with // equal probability 1 with 75% function rand3 () { // returns 0 1 2 or 3 with 25% probability var r = 2 * rand2 () + rand2 (); if ( r < 3 ) return r ; return rand3 (); } var ans = '' ; //to store the output for ( var i = 0 ; i < 100 ; i ++ ) ans += rand3 (); document . write ( ans ); // This code is contributed by shruti456rawal < /script>
الإخراج :
2111011101112002111002020210112022022022211100100121202021102100010200121121210122011022111020
حل آخر -
إذا كانت x = rand2() وy = rand2() x + y فسوف تُرجع 0 و2 باحتمال 25% و1 باحتمال 50%. لجعل احتمالية 1 مساوية لاحتمالية 0 و2، أي 25%، نقوم بإزالة حدث واحد غير مرغوب فيه يؤدي إلى x + y = 1، أي إما (x = 1 y = 0) أو (x = 0 y = 1).
int rand3() { int x y; do { x = rand2(); y = rand2(); } while (x == 0 && y == 1); return x + y; }
يرجى ملاحظة أن الحلول المذكورة أعلاه ستنتج نتائج مختلفة في كل مرة نقوم بتشغيلها.