मेरे पास एक साधारण कंसोल एप्लिकेशन की मुख्य विधि के अंदर सी # में निम्न कोड है।

मैंने डीबग किया है और 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();
0
daniel.jbatiz 12 जुलाई 2020, 07:56

2 जवाब

सबसे बढ़िया उत्तर

आपके अंक 0 से (और छोड़कर!) 9 तक हैं, जो प्रति अंक आठ विकल्प बनाता है (0-8) और इस प्रकार 6561 संयोजन (9*9*9*9)।

साथ ही, सावधान रहें कि आपका एल्गोरिदम बेहद अक्षम है। आखिरकार, आपकी सूची में बहुत भीड़ होगी और फिर, एल्गोरिथम अधिकांश समय यह जाँचने में व्यतीत करेगा कि कोई दी गई यादृच्छिक संख्या पहले से ही आपकी परिणाम सूची में समाहित है या नहीं।

यदि आपका लक्ष्य सूचकांकों में फेरबदल करना है, तो आप उन सूचकांकों की सूची बनाकर उस तक अधिक कुशलता से पहुंच सकते हैं जिन्हें आपने पहले से सम्मिलित नहीं किया है।

3
Georg 12 जुलाई 2020, 08:17

उत्तर जॉर्ज द्वारा पहले ही दिया जा चुका है, लेकिन आपकी दक्षता समस्या के बारे में: यदि आप जो चाहते हैं वह पूर्णांक की एक फेरबदल सूची है, तो आप इसे सूची में एक विस्तार विधि के साथ कर सकते हैं।

var shuffled = Enumerable.Range(0, 10000).Shuffle();

अधिक जानकारी के लिए यहां देखें शफलिंग के लिए आवश्यक IEnumerable पर एक एक्सटेंशन विधि

1
Bidou 12 जुलाई 2020, 08:26