Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> प्रोग्रामिंग

अंडा गिराने की पहेली


यह एक प्रसिद्ध पहेली समस्या है। मान लीजिए कि n मंजिलों वाली एक इमारत है, यदि हमारे पास m अंडे हैं, तो हम उस मंजिल को खोजने के लिए आवश्यक न्यूनतम बूंदों की संख्या कैसे प्राप्त कर सकते हैं, जहां से अंडे को तोड़े बिना गिराना सुरक्षित है।

याद रखने के लिए कुछ महत्वपूर्ण बिंदु हैं -

  • जब कोई अंडा किसी दी गई मंजिल से नहीं टूटता है, तो वह किसी निचली मंजिल के लिए भी नहीं टूटेगा।
  • यदि कोई अंडा किसी दी गई मंजिल से टूटता है, तो वह सभी ऊपरी मंजिलों के लिए टूट जाएगा।
  • जब अंडा टूट जाए तो उसे फेंक देना चाहिए, नहीं तो हम उसे दोबारा इस्तेमाल कर सकते हैं।

इनपुट और आउटपुट

Input:
The number of eggs and the maximum floor. Say the number of eggs are 4 and the maximum floor is 10.
Output:
Enter number of eggs: 4
Enter max Floor: 10
Minimum number of trials: 4

एल्गोरिदम

eggTrialCount(eggs, floors)

इनपुट: अंडों की संख्या, अधिकतम मंजिल।

आउटपुट - कम से कम परीक्षण प्राप्त करें।

Begin
   define matrix of size [eggs+1, floors+1]
   for i:= 1 to eggs, do
      minTrial[i, 1] := 1
      minTrial[i, 0] := 0
   done

   for j := 1 to floors, do
      minTrial[1, j] := j
   done

   for i := 2 to eggs, do
      for j := 2 to floors, do
         minTrial[i, j] := ∞
         for k := 1 to j, do
            res := 1 + max of minTrial[i-1, k-1] and minTrial[i, j-k]
            if res < minTrial[i, j], then
               minTrial[i,j] := res
         done
      done
   done

   return minTrial[eggs, floors]
End

उदाहरण

#include<iostream>
using namespace std;

int max(int a, int b) {
   return (a > b)? a: b;
}

int eggTrialCount(int eggs, int floors) {    //minimum trials for worst case
   int minTrial[eggs+1][floors+1];    //to store minimum trials for ith egg and jth floor
   int res;

   for (int i = 1; i <= eggs; i++) {    //one trial to check from first floor, and no trial for 0th floor
      minTrial[i][1] = 1;
      minTrial[i][0] = 0;
   }

   for (int j = 1; j <= floors; j++)    //when egg is 1, we need 1 trials for each floor
      minTrial[1][j] = j;

   for (int i = 2; i <= eggs; i++) {    //for 2 or more than 2 eggs
      for (int j = 2; j <= floors; j++) {    //for second or more than second floor
         minTrial[i][j] = INT_MAX;
         for (int k = 1; k <= j; k++) {
            res = 1 + max(minTrial[i-1][k-1], minTrial[i][j-k]);
            if (res < minTrial[i][j])
               minTrial[i][j] = res;
         }
      }
   }

   return minTrial[eggs][floors];    //number of trials for asked egg and floor
}

int main () {
   int egg, maxFloor;
   cout << "Enter number of eggs: "; cin >> egg;
   cout << "Enter max Floor: "; cin >> maxFloor;
   cout << "Minimum number of trials: " << eggTrialCount(egg, maxFloor);
}

आउटपुट

Enter number of eggs: 4
Enter max Floor: 10
Minimum number of trials: 4

  1. Math.Fूर () सी # में विधि

    C# में Math.Floor() विधि का उपयोग निर्दिष्ट संख्या से कम या उसके बराबर सबसे बड़ा अभिन्न मान वापस करने के लिए किया जाता है। सिंटैक्स public static decimal Floor (decimal val); public static double Floor (double val) ऊपर दिए गए पहले सिंटैक्स के लिए, मान वैल दशमलव संख्या है, जबकि दूसरे सिंटैक्स में वै

  1. अंडा गिराने की पहेली के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - मान लीजिए कि हम जानना चाहते हैं कि 40-मंजिला इमारत में कौन सी कहानियां अंडे गिराने के लिए सुरक्षित हैं, और उनमें से कौन अंडे की मदद से अंडे को नुकसान पहुंचाएगी। कहानियों की जांच के लिए हमें न्यूनतम संख्या में ट्रेल्स

  1. SQL सर्वर में FLOOR फ़ंक्शन

    यह लेख आपको विस्तार से दिखाएगा कि SQL सर्वर में FLOOR () संख्यात्मक प्रसंस्करण फ़ंक्शन का उपयोग कैसे करें, विशिष्ट सिंटैक्स और उदाहरणों के साथ बेहतर विज़ुअलाइज़ेशन और फ़ंक्शन कैप्चर करने के लिए। वर्णन करें FLOOR फ़ंक्शन SQL सर्वर में निम्न बाध्य लौटाता है संख्या या व्यंजक का मान, यानी सबसे बड़ा पूर्