Tribonacci Sequence More Exercise Methods
Здравейте, някой може ли да ми даде отговор защо получавам 2 грешки - 5ти и 6ти тест?
Грешките са за наперавилен тип данни: **
https://pastebin.com/QLavqGGN
Здравейте, някой може ли да ми даде отговор защо получавам 2 грешки - 5ти и 6ти тест?
Грешките са за наперавилен тип данни: **
https://pastebin.com/QLavqGGN
Програмата ще гърми с IndexOutOfRangeException при вход, по-малък от 3, заради:
private static void Calculation(int[] tribonacci)
{
tribonacci[0] = tribonacci[1] = 1;
tribonacci[2] = 2;
Ето един вариант за заобикаляне на проблема:
static void Main(string[] args)
{
int lenght = int.Parse(Console.ReadLine());
int[] tribonacci = new int[Math.Max(lenght, 3)]; // <-
Calculation(tribonacci);
for (int i = 0; i < lenght; i++) // <-
{
Console.Write($"{tribonacci [i]} ");
}
}
Не си предвидил числа <3 и типа данни - BigInteger за големи стойности. При подобни изчисления последователните стойности растат експоненциално.
Toва решение пак дава 80/100 пренаписано от C#.Toва е на колегата решението,пробвах и с едно друо.Искам някой да ми даде решение на Python 100/100 да видя къде греша,като и на Center Point 10 решения пренаписани от C# на Python дават пак 80/100 num=int(input()) def tribo(num): new_list=[0]*num new_list[0]=1 new_list[1]=1 new_list[2]=2 for i in range(3,num): new_list[i]=new_list[i-3]+new_list[i-2]+new_list[i-1] print(*new_list,sep=" ") if (num<3): for i in range(0,num-1): print(1,end="") print() else: tribo(num)
Разбрах къде е грешката,явно е в случаите когата числото е под 3,обхваща 1,2,3.Единствено тогава може да се счупи или да не изпринтира нищо
Здравей колега,
След корекциите на кода ти по указанията на Мартин той минава успешно всички тестове.
https://pastebin.com/PAsn3ws7
using System;
class Program {
static void Main(string[] args) {
int n1 = 0;
int n2 = 0;
int n3 = 1;
int n = int.Parse(Console.ReadLine());
if (n > 0) {
Console.Write(1 + " ");
}
for (int i = n; i > 1; --i) {
int num = n1 + n2 + n3;
Console.Write(num + " ");
n1 = n2;
n2 = n3;
n3 = num;
}
}
}
Здравей и благодаря за отговора, след направената промяна отново дава 80 точки.
Вариант за сравнение на логиката:
using System;
using System.Numerics;
namespace _04.TribonacciSequence_3
{
class Program
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
BigInteger[] result = TribonacciNumbers(n);
Console.WriteLine(String.Join(' ', result));
}
private static BigInteger[] TribonacciNumbers(int n)
{
BigInteger[] result = new BigInteger[n];
switch (n)
{
case 1:
result[0] = 1;
break;
case 2:
result[0] = 1;
result[1] = 1;
break;
case 3:
result[0] = 1;
result[1] = 1;
result[2] = 2;
break;
default:
result[0] = 1;
result[1] = 1;
result[2] = 2;
for (int i = 3; i < n; i++)
{
BigInteger currNum = result[i - 3] + result[i - 2] + result[i - 1];
result[i] = currNum;
}
break;
}
return result;
}
}
}
Благодаря, разбрах какъв е проблема :). Също така задачата се получи с uint, така че не е нужно да се използва BigInteger.