4. Sieve of Eratosthenes
Здравейте колеги! Ще се радвам да помогнете. Много си играх да разбера как от стринг да направя масив, или по точно:
string arrString = "1 2 3 4 5";
int[] arr = arrString.Split(' ' ).Select(int.Parse).ToArray();
Console.WriteLine(string.Join(" ",arr));
Този пример горе работи и си печата масива с петте елемента.
Но като се пробвам да реша тази задача и накрая опитвам да направя това същото нещо и ми дава грешка на ред 33.
Целта е да се намерят всички прости числа от 1 до n, да се вкарат в масив и да се отпечат.
Ето и кода:
Благодаря!
Здравей, благодаря ти за помоща :) Определено така ще е по-лесно с директно добавяне към масива, но не се сетих как. А и не знам каква дължина да му сложа. Бих се възползвал отново от помоща ти, даже се сетих за един пример:
int[] evenNumbers = new int[?];
for (int i = 0; i < 20; i++)
{
if (i % 2 == 0)
{
//Искам да го добавям към масива... Но как?
}
}
Задължително ли е винаги масива да има предопределена дължина? Искам да е по-гъвкав :)
Мерси!
Здравей,
Виж: array of an unknown length. Използвай List<int>, а ако задължително трябва да е масив, то дължината му няма да е по-голяма от "input". Съответно трябва да има и някакъв брояч за намерените "isPrime", както и накрая, може да се изполва Array.Resize, за да се намали дължината на масива до counter. Примерно.
При evenNumbers, предполагам дължината ще е равна на половината от всичките. Добавянето ще бъде или с отделен брояч или с някакво производно от i, примерно (int)i/2, например int counter = (int)i/2; evenNumbers[counter ] = i;
https://pastebin.com/hRcKcQLp Ето как съм я измислил аз. Както каза Quake3, дължината на масива няма как да е по-голяма от числото до което търсим всички прайм. За това създаваме масив от n+1 числа(+1 защото започваме от 0). След това с цикъл вкарваш числата до n(arr[i]=i). За твоето решение-мисля че arrString += i + " "; ще трябва да стане arrString += i;. След това със string.Join ще си наслагаш спейсовете, във стринга не ти трябват.