मेरे पास एक साधारण कंसोल एप्लिकेशन की मुख्य विधि के अंदर सी # में निम्न कोड है।
मैंने डीबग किया है और List.Count = 6551 के बाद ऐसा लगता है कि यादृच्छिक मान स्वयं को दोहराते हैं।
List<int> list = new List<int>(9999);
bool waiting = true;
Random random = new Random(DateTime.Today.Milliseconds);
do
{
int units = random.Next(0, 9);
int tens = random.Next(0, 9);
int hundreds = random.Next(0, 9);
int thousands = random.Next(0, 9);
int result = int.Parse(String.Format("{0}{1}{2}{3}", units, tens, hundreds, thousands));
if(list.Contains(result))
{
continue;
}
else
{
list.Add(result);
}
if(list.Count == 9999)
{
waiting = false;
}
}while(waiting);
Console.WriteLine("Finished"):
Console.ReadKey();
2 जवाब
आपके अंक 0 से (और छोड़कर!) 9 तक हैं, जो प्रति अंक आठ विकल्प बनाता है (0-8) और इस प्रकार 6561 संयोजन (9*9*9*9
)।
साथ ही, सावधान रहें कि आपका एल्गोरिदम बेहद अक्षम है। आखिरकार, आपकी सूची में बहुत भीड़ होगी और फिर, एल्गोरिथम अधिकांश समय यह जाँचने में व्यतीत करेगा कि कोई दी गई यादृच्छिक संख्या पहले से ही आपकी परिणाम सूची में समाहित है या नहीं।
यदि आपका लक्ष्य सूचकांकों में फेरबदल करना है, तो आप उन सूचकांकों की सूची बनाकर उस तक अधिक कुशलता से पहुंच सकते हैं जिन्हें आपने पहले से सम्मिलित नहीं किया है।
उत्तर जॉर्ज द्वारा पहले ही दिया जा चुका है, लेकिन आपकी दक्षता समस्या के बारे में: यदि आप जो चाहते हैं वह पूर्णांक की एक फेरबदल सूची है, तो आप इसे सूची में एक विस्तार विधि के साथ कर सकते हैं।
var shuffled = Enumerable.Range(0, 10000).Shuffle();
अधिक जानकारी के लिए यहां देखें शफलिंग के लिए आवश्यक IEnumerable पर एक एक्सटेंशन विधि
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।