2010-05-31 17 views
8

मैं 25 अद्वितीय यादृच्छिक संख्याएं उत्पन्न करना चाहता हूं और उन्हें कंसोल में सूचीबद्ध करना चाहता हूं। संख्या कम से कम 10 वर्ण लंबी होनी चाहिए। ऐसा करने का कोई आसान तरीका?कई यादृच्छिक संख्याएं उत्पन्न करना

+1

अक्षरों से मुझे लगता है कि आप दशमलव अंक का मतलब है? –

+0

हां वे अल्फान्यूमेरिक वर्ण भी हो सकते हैं .. कोई guid कृपया – Jasl

+1

अल्फान्यूमेरिक! = यादृच्छिक संख्याएं। आप यादृच्छिक तार – RvdK

उत्तर

13

संख्या का निर्माण तारों के रूप में की कोशिश करो, और एक HashSet का उपयोग सुनिश्चित करने के लिए वे खास हैं:

Random random = new Random(); 
HashSet<string> ids = new HashSet<string>(); 

while (ids.Count < 25) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < 10; ++i) 
    { 
     sb.Append(random.Next(10)); 
    } 
    ids.Add(sb.ToString()); 
} 

उदाहरण आउटपुट:

 
7895499338 
2643703497 
0126762624 
8623017810 
...etc... 

वर्ग HashSet नेट में मौजूद है 3.5 और नए।

2

समस्या "25 अद्वितीय यादृच्छिक" में थोड़ा सा है। 25 यादृच्छिक संख्याओं को प्रदर्शित करना

Random r = new Random(); 
for(int i=0; i<25; i++) 
    Console.WriteLine(r.Next(1,100).ToString()); 

ये आवश्यक नहीं हैं, हालांकि यह आवश्यक नहीं है। यदि आप डुप्लिकेट की अनुमति नहीं देना चाहते हैं, तो आपको किसी भी तरह से पहले जेनरेट किए गए नंबरों को स्टोर करने की आवश्यकता है, और यदि आप पुराने को दबाते हैं तो फिर से रोल करें।

ध्यान रखें कि आप इस तरह से जेनरेट किए गए नंबरों की संभावना वितरण को बदलते हैं।

संपादित करें: मैंने अभी देखा है कि ये संख्या दस वर्ण लंबी होनी चाहिए। चूंकि 9, 99, 99, 999 इंट 32.मैक्सवैल्यू से अधिक है, इसलिए मैं के बजाय Math.Floor(r.NextDouble() * 10000000000 + 1000000000) का उपयोग करने का सुझाव दूंगा।

चूंकि आपकी संख्या इतनी लंबी है, आपको डुप्लिकेट के बारे में चिंता करने की आवश्यकता नहीं है। वे बहुत ही असंभव हैं।

+0

'999 999 999'' int.MaxValue' से अधिक नहीं है। हालांकि एक अरब द्वारा 'r.Next() 'गुणा करना संभवतः हो सकता है। – IVlad

+0

@IVlad: मेरा मतलब 10 '9 लिखना था। 'r.Next()' एक int के बजाय एक डबल देता है, इसलिए मैंने इसका उपयोग क्यों किया। – Jens

+0

नहीं, 'r.Next() 'एक int देता है। आप 'r.NextDouble()' चाहते हैं, और फिर भी आप चीजों को कम कर रहे हैं। – IVlad

-2
Random rnd = new Random(table); 
for(int i = 0; i < 25; ++i) { 
    Console.WriteLine("{0}", rnd.Next(50, 50+i) 
} 
+1

अद्वितीय होने की गारंटी नहीं है। – crazyscot

+0

क्या आप एक डिजिटल कंप्यूटर पर एक तकनीक का सुझाव दे सकते हैं जिसकी गारंटी है। और मेरा मतलब 100% है? –

0

एक आसान तरीका यह है:

class Test 
{ 
    private static void Main() 
    { 
     Random rand = new Random(); 

     for (int i = 0; i < 25; ++i) 
     { 
      Console.WriteLine(rand.Next(1000000000, int.MaxValue)); 
     } 
    } 
} 

यह है कि संख्या हमेशा 10 अक्षर (अंक) लंबे होते हैं सुनिश्चित करेगा। हालांकि वे अनिवार्य रूप से अद्वितीय नहीं होंगे। यदि आप चाहते हैं उन्हें निश्चित रूप से अद्वितीय होने के लिए आपको कुछ इस तरह करना होगा:

class Test 
{ 
    private static void Main() 
    { 
     Random rand = new Random(); 

     var generatedSoFar = new HashSet<int>(); 
     for (int i = 0; i < 25; ++i) 
     { 
      int newRand; 
      do 
      { 
       newRand = rand.Next(1000000000, int.MaxValue); 
      } while (generatedSoFar.Contains(newRand)); // generate a new random number until we get to one we haven't generated before 

      generatedSoFar.Add(newRand); 

      Console.WriteLine(newRand); 
     } 
    } 
} 

आप दस से अधिक अंक होने के लिए सक्षम होना चाहते हैं, तो आप बिना किसी क्रम के 10 और के बीच अंकों की संख्या उत्पन्न अपने अंकों की अधिकतम संख्या। फिर StringBuilder या List में यादृच्छिक रूप से प्रत्येक अंक (या अंकों का समूह) उत्पन्न करें। आप विशिष्टता सुनिश्चित करने के लिए ऊपर उपयोग किए गए HashSet विधि का उपयोग कर सकते हैं।

1

यादृच्छिकता और विशिष्टता के बीच एक बड़ा अंतर है।

तो अगर आप वास्तव में अद्वितीय संख्या की जरूरत है क्या आप वाकई कहीं सब पहले से ही बनाई गई संख्या को बचाने और देखें कि क्या अपने नव निर्मित एक इस सूची में शामिल नहीं है बनाने के लिए है या आप कुछ एल्गोरिथ्म है कि एक है कि यह सुनिश्चित करता है प्रदान करने के लिए दिया गया नंबर दो बार नहीं बनाया जा सकता है।

काम करने के लिए दूसरा भाग पाने के लिए आप ज्यादातर सृजन पल की तिथि/समय लेते हैं, क्योंकि वर्तमान दिनांक/समय जोड़ी हमेशा के लिए अद्वितीय है। एकमात्र समस्या यह है कि आपके पास कितनी रचनाएं (मिली) सेकंड हैं और आपके अद्वितीय नंबर को स्टोर करने के लिए कितने अंक उपलब्ध हैं।

12 अंकों is made here का उपयोग करने के बारे में एक नमूना। उम्मीद है की यह मदद करेगा।

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