[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. Просто не исках да си играя на налучкване. Благодаря за помощта.