Здравейте защо на задача Pascal triangle ми дава 66/100 https://pastebin.com/aMZN9qXQ
линк към задачата https://judge.softuni.bg/Contests/Practice/Index/1452#0
Use BigInteger instead of int when setting up your Pascal triangle:
(66/100): int[][] pascal = new int[rows][];
(100/100): BigInteger[][] pascal = new BigInteger[rows][];
Здравей колега,
Предлагам ти едно просто решение без използване на матрици.
За да работи кода коректно и при по-големи стойности за n е необходмо елементите на листа да са от тип Biginteger.
Здравейте, моля за помощ в логиката ми за същата задача. Опитвам се да я реша по следния начин:
-приемам, че първоначално имаме един главен масив- "main", който се състой само от една цифра равна на 1;
-докато главния масив е с дължина<n(числото, което е равно на броя на редовете , като именно него първоначално четем) създаваме нов масив "pascal []", чиято дължина ще се увеличава с 1 при всяка итерация на цикъла;
- този масив "pascal []" с for цикъл го пълня със сбора от числата на главния "main []" масив, като приемам, че винаги първото и последното му число ще са равни на 1;
Резултатът ми е "чудесен": "System.IndexOutOfRangeException " . Моля за помощ!
using System;
using System.Linq;
namespace Arrays1
{
class MainClas
{
public static void Main()
{
int lineNumbers = int.Parse(Console.ReadLine());
long []main = new long[1];
main[0] = 1;
while (main.Length <lineNumbers) {
long[] pascalArray = new long [main.Length + 1];
pascalArray[0] = 1;
for (int i = 1; i < pascalArray.Length; i++)
{
pascalArray[i] = main[i] + main[i + 1];
}
pascalArray[main.Length - 1] = 1;
main = pascalArray;
Console.WriteLine($"{pascalArray}");
}
}
}
}
Опитвате да достъпите невалиден индекс на main[]:
long []main = new long[1]; // размер 1, само индекс 0 е валиден
// ...
long[] pascalArray = new long [main.Length + 1]; // pascalArray е с размер 2
for (int i = 1; i < pascalArray.Length; i++)
{
pascalArray[i] = main[i] + main[i + 1];
// i e 1, main[1] и main[1+1] хвърлят IndexOutOfRangeException
}
Вижте и съветите на колегите по-горе - за тази задача трябва да се използва BigInteger[], а не long[]
Благодаря, че ми обяснихте защо ми се получаваше : "System.IndexOutOfRangeException " . Сега след корекциите вече достъпвам валидни индекси, като и с една if проверка влизам в for цикъла за да създавам нов pascalArray само когато main.Length е >1. Резултата е, че печатам Pascal Triangle, но винаги с "0" накрая.
при input=4:
1 0
1 1 0
1 2 1 0
1 3 3 1 0
Възможно ли е да получавам винаги "0" накрая, защото използвам long, а не BigInteger? При мен не работи BigInteger. На няколко пъти се опитвам да инсталирам System.Numerics на Monodevelop 6.8.0.123 , но не намирам достатъчно информация. Накрая или ще сменя версията с по-нова или ще мина на Windows и Visul Studio.
using System;
using System.Linq;
namespace Arrays1
{
class MainClas
{
public static void Main()
{
long lineNumbers = long.Parse(Console.ReadLine());
long[]main = new long[1];
main[0] = 1;
while (main.Length <=lineNumbers) {
long[] pascalArray = new long [main.Length + 1];
pascalArray[0] = 1;
if (main.Length > 1)
{
for (long i = 1; i < pascalArray.Length - 1; i++)
{
pascalArray[i] = main[i - 1] + main[i];
}
}
pascalArray[main.Length - 1] = 1;
main = pascalArray;
Console.WriteLine(string.Join(" ",main));
}
}
}
}
Поздрави и още веднъж благодаря за съветите Ви!
да мерсии ! наистина трябваше да използвам може би и с long да работи .