2012-06-05 10 views
5
Write an efficient algorithm to print the following two outputs 

आप एक पूर्व निर्धारित समारोह नामित getrand100 (दिया जाता है से अद्वितीय यादृच्छिक संख्या बनाने के लिए कैसे)। आप इसे फ़ंक्शन जितनी बार चाहें उतनी बार कॉल कर सकते हैं लेकिन सावधान रहें कि यह फ़ंक्शन काफी संसाधन गहन है। आप किसी भी अन्य यादृच्छिक जनरेटर का उपयोग नहीं कर सकते हैं। आप getrand100() की परिभाषा को बदल नहीं सकते हैं। यादृच्छिक क्रम में प्रिंट संख्या 1-20:जो एक पूर्णांक जो 1-100 से एक यादृच्छिक संख्या है देता है एक दिया रैंडम जनरेटर

int getrand100(){ 
    Random rand = new Random(); 
return (1+rand.nextInt(100));  
} 
  • output1। (20 यादृच्छिक संख्या नहीं)
  • आउटपुट 2: यादृच्छिक क्रम में प्रिंट संख्या 1-200। (नहीं 200 यादृच्छिक संख्या)

नोट:

  • मैं। प्रत्येक नंबर को एक बार मुद्रित किया जाना चाहिए।
  • ii। संख्या सूची में कोई पैटर्न नहीं होना चाहिए। सूची पूरी तरह यादृच्छिक
    यानी होनी चाहिए, सभी संख्याओं में किसी भी स्थान पर समान संभावना दिखाई देनी चाहिए।
  • iii। आप getrand100() को यादृच्छिक संख्या 1 से 100 तक प्राप्त करने के लिए किसी भी समय कॉल कर सकते हैं।
  • iv। Getrand100() को छोड़कर आप किसी भी अन्य यादृच्छिक जनरेटर फ़ंक्शन का उपयोग नहीं कर सकते हैं।
+0

क्या यह होमवर्क है? – dckrooney

+0

शायद सबसे सरल समाधान जो आप शुरू कर सकते हैं वह 'ब्रूट-फोर्स' समाधान है :)। किसी सूची में एक संख्या में जोड़ें, जबकि यह अभी तक नहीं है - लेकिन यह "कुशल" नहीं है। – Xeon

उत्तर

3

विचार यादृच्छिक संख्याओं की गणना करने के लिए दिए गए यादृच्छिक जनरेटर का उपयोग करना है।

1) यादृच्छिक संख्या 1-20 के लिए, बस 100 नंबर को विभाजित समान रूप से 20.

2) के लिए 1 का प्रतिनिधित्व करने के 1-200 उत्पन्न, 200 भी 1 से नंबर प्राप्त हों और उसके बाद (जोड़ने के लिए - 1 या 0) सभी नंबरों को 1 से 200 तक प्राप्त करने के लिए।

import java.util.*; 
public class Rand20_200{ 
    int number20[]=new int[20]; //numbers in random order 
    int number200[]=new int[200]; 

    public Rand20_200(){ 
    int n=0; 
    int ngen[]=new int[20]; //to store which random numbers are generated 
    while(n<20){ 
     int rnd=1 + (getrand100()-1)/5; 
     if (ngen[rnd-1]==0){ 
     ngen[rnd-1]=1; 
     number20[n++]=rnd; 
     } 
    } 
    System.out.println("Random 20 numbers"); 
    print(number20); 

    ngen=new int[200]; //to store which random numbers are generated 
    int numoff[]={-1,0}; //offset to add 
    n=0; 
    while(n<200){ 
     int rnd=numoff[(getrand100()-1)/50]+ (getrand100()*2); 
     if (ngen[rnd-1]==0){ 
    ngen[rnd-1]=1; 
    number200[n++]=rnd; 
     } 
    } 
    System.out.println("\nRandom 200 numbers"); 
    print(number200); 
    } 

    int getrand100(){ 
    Random rand = new Random(); 
    return (1+rand.nextInt(100));  
    } 

    void print(int arr[]){ 
    for(int i=0;i<arr.length;i++){ 
     System.out.print(arr[i]+" "); 
    } 
    } 

    public static void main(String args[]){ 
    new Rand20_200(); 
    } 

} 
+2

यह ऐसी जानकारी नहीं है जो ओपी को ** होमवर्क ** को हल करने में मदद करेगी। – JimmyB

+0

आपका क्या मतलब है और आपकी समस्या क्या है? अगर आपके पास मेरे समाधान के लिए कोई रचनात्मक सुझाव नहीं है, तो आपको टिप्पणी करने की आवश्यकता नहीं है। – Subs

+0

@Subs होमवर्क का विस्तार से जवाब नहीं दिया जाना चाहिए, इनपुट के लिए +1 +1 –

2

मान लीजिए कि यह होमवर्क है, मैं जवाब terse रखूंगा। :) modulus ऑपरेटर%

+0

हां, यह एक घर का काम है लेकिन मैं इसके लिए कुछ तर्क लागू करने में असमर्थ हूं। कृपया मुझे इसके जरूरी लोगों की मदद करें। धन्यवाद। –

+0

जैसा कि पहले से ही उल्लेख किया गया है, यदि आप समय के लिए crunched हैं तो लागू करने के लिए ब्रूट फोर्स समाधान सबसे आसान हो सकता है। – dckrooney

+0

@ डीक्रूनी - आम तौर पर मैं आपके साथ सहमत हूं, हालांकि प्रशिक्षक यह स्पष्ट करता है कि getrand100() "काफी संसाधन गहन" है जो सुझाव देता है कि न्यूनतम से अधिक कॉलों को ग्रेडिंग दंड मिलेगा। –

0

में

देखो आप अपने मूल्य (1 - 20, 1 - 200) के साथ एक सूची बना सकते हैं और एक यादृच्छिक संख्या है, तो यादृच्छिक संख्या पर सूची को सॉर्ट।

public class RandomListItem 
{ 
    int value; 
    int sortindex; 

    public RandomListItem(x,y) 
    { 
     value = x; 
     sortindex = y; 
    } 
} 

for(int i = 1; i <= maxvalue; i++) 
{ 
    list.add(new RandomListItem(i, getrand100()); 
} 

यह 200 सूची के लिए इतना अच्छा नहीं हो सकता है, जब से तुम केवल यादृच्छिक संख्या उत्पन्न कर सकते हैं 100 अप करने के लिए getrand100() * getrand100() या कुछ और उपयोग करने के लिए यादृच्छिक संख्या की एक व्यापक रेंज उत्पन्न करना चाहते सकता है ।

संबंधित मुद्दे