[Exam Problems] C# Basics - Nine-DIgit Magic Numbers - OutOfMemoryException
Написах кода на задачата и в конзолата работи нормално. Разбира се, няма как ръчно да проверя дали е намерило всички числа, отговарящи на условието, но тези, които ги намира, отговарят. Но при опит за тест ми изведе следната грешка:
Първоначално предположих, че програмата е прекалено голяма, но реално заема 8 МБ. И не мога да разбера какво се случва. Втора задача, за която конзолата и Judge дават различен аутпут.
Zero test #1 (Runtime error)
Unhandled Exception: OutOfMemoryException.
Надолу можете да видите и кода. Нищо сложно - с девет цикъла един в друг вадя всяко едно деветцифрено число, съдържащо цифри 1-7. Записвам числата в масив и ги сортирам в друг.
using System;
    class NineDigitMagicNumbers
    {
        static void Main()
        {
            int sum = int.Parse(Console.ReadLine());
            int diff = int.Parse(Console.ReadLine());
            int a,b, c, d, e, f, g, h, i = 0;
            int[] container = new int[41000000];
            int magicCounter = 0;
            int abc, def, ghi;
            for(int j1=1; j1<=7; j1++)
            {
                a = j1;
                for(int j2=1; j2<=7; j2++)
                {
                    b = j2;
                    for(int j3=1; j3<=7; j3++)
                    {
                        c = j3;
                        for (int j4 = 1; j4 <= 7; j4++)
                        {
                            d = j4;
                            for(int j5=1; j5<=7; j5++)
                            {
                                e = j5;
                                for(int j6=1; j6<=7; j6++)
                                {
                                    f = j6;
                                    for(int j7=1; j7<=7; j7++)
                                    {
                                        g = j7;
                                        for(int j8=1; j8<=7; j8++)
                                        {
                                            h = j8;
                                            for(int j9=1; j9<=7; j9++)
                                            {
                                                i = j9;
                                                abc = 100 * a + 10 * b + c;
                                                def = 100 * d + 10 * e + f;
                                                ghi = 100 * g + 10 * h + i;
                                                if(((ghi-def) == (def-abc))&&((def-abc) == diff)&&(a+b+c+d+e+f+g+h+i == sum)&&(abc <= def)&&(def <= ghi) )
                                                {
                                                    int abcdefghi = a * 100000000 + b * 10000000 + c * 1000000 + d * 100000 + e * 10000 + f * 1000 + g * 100 + h * 10 + i;
                                                    container[magicCounter] = abcdefghi;
                                                    magicCounter++;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (magicCounter > 0)
            {
                int[] displayNumbers = new int[magicCounter];
                for (int j = 0; j < magicCounter; j++)
                {
                    displayNumbers[j] = container[j];
                }
                Array.Sort(displayNumbers);
                for (int j = 0; j < magicCounter; j++)
                {
                    Console.WriteLine(displayNumbers[j]);
                }
            }
            else Console.WriteLine("No");
            
        }
    }
Да, прав си, свалих елементите от масива до 410 и мина теста. Но просто не знам как да изчисля най-големия възможен брой на магически числа и затова заделих място за всички 41 милиона числа, които могат да се образуват с цифрите от 1 до 7. Просто не исках да си играя на налучкване. Благодаря за помощта.