Loading...
Daniel.Pavlov avatar Daniel.Pavlov 6 Точки

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, да се вкарат в масив и да се отпечат.

Ето и кода:

https://pastebin.com/AxgfHH1B

Благодаря!

Тагове:
0
Fundamentals Module
Quake3 avatar Quake3 546 Точки
Best Answer

Не знам дали логиката е правилна, но направих следното:
Разделих:

int[] arr = arrString.Split(' ').Select(int.Parse).ToArray();

на по-малки части:

var temp = arrString.Split(' ');
var temp2 = temp.Select(int.Parse);
int[] arr = temp2.ToArray();

След това сложих breakpoint на temp и въведох 7. Ясно се вижда, че temp (string array) съдържа 5 елемента, като последният е празен (empty string).

Избегнах го, като замених: 

var temp = arrString.Split(' '); 

с  

var temp = arrString.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

Грешка на ред 33, вече няма. Надявам се да съм помогнал.

P.S. Няма ли да е по-добре, вместо в string, директно да добавяш в int array?

0
10/05/2018 02:10:03
Daniel.Pavlov avatar Daniel.Pavlov 6 Точки

Здравей, благодаря ти за помоща :) Определено така ще е по-лесно с директно добавяне към масива, но не се сетих как. А и не знам каква дължина да му сложа. Бих се възползвал отново от помоща ти, даже се сетих за един пример:

int[] evenNumbers = new int[?];

            for (int i = 0; i < 20; i++)
            {
                if (i % 2 == 0)
                {
                    //Искам да го добавям към масива... Но как?
                }
            }

Задължително ли е винаги масива да има предопределена дължина? Искам да е по-гъвкав :)

Мерси!

0
Quake3 avatar Quake3 546 Точки

Здравей,
Виж: 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;

0
10/05/2018 02:55:48
TeMePyT avatar TeMePyT 142 Точки

https://pastebin.com/hRcKcQLp Ето как съм я измислил аз. Както каза Quake3, дължината на масива няма как да е по-голяма от числото до което търсим всички прайм. За това създаваме масив от n+1 числа(+1 защото започваме от 0). След това с цикъл вкарваш числата до n(arr[i]=i). За твоето решение-мисля че arrString += i + " "; ще трябва да стане arrString += i;. След това със string.Join ще си наслагаш спейсовете, във стринга не ти трябват.

1
10/05/2018 09:20:54
BoYaN avatar BoYaN 336 Точки

Само че това не е алгоритъма за Ситото. Виж тук има анимация какво трябва да се случи. Ето и едно решение на Python
 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.