Loading...
+ Нов въпрос
MartinBG avatar MartinBG 4436 Точки

Програмата ще гърми с 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]} ");
            }
        }

 

2
Nikolamv95 avatar Nikolamv95 4 Точки

Здравей и благодаря за отговора, след направената промяна отново дава 80 точки.

1
RoumenRoussev avatar RoumenRoussev 121 Точки

Вариант за сравнение на логиката:

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;
        }
    }
}

0
Nikolamv95 avatar Nikolamv95 4 Точки

Благодаря, разбрах какъв е проблема :). Също така задачата се получи с uint, така че не е нужно да се използва BigInteger.

0
RoumenRoussev avatar RoumenRoussev 121 Точки

Не си предвидил числа <3 и типа данни - BigInteger за големи стойности. При подобни изчисления последователните стойности растат експоненциално.

0
Julianh12 avatar Julianh12 2 Точки
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)
0
Julianh12 avatar Julianh12 2 Точки

Разбрах къде е грешката,явно е в случаите когата числото е под 3,обхваща 1,2,3.Единствено тогава може да се счупи или да не изпринтира нищо

0
krum_43 avatar krum_43 718 Точки

Здравей колега,

След корекциите на кода ти по указанията на Мартин  той минава успешно всички тестове.

https://pastebin.com/PAsn3ws7 

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