Професионална програма
Loading...
adelina_t avatar adelina_t 2 Точки

Home Contests CSharp-Book 9.1. Problems for Champions - Part I

Здравейте,

На тази задача ми дава 90/100.Дава ми грешка на Test 11.Какво ли сменях и не мислих,но все пак ми дава грешка там.

Ако може да ми помогнете да разбера от къде е грешката(не знам входните данни на тест 11).

Това е здачата:

 

Задача: пресичащи се редици

Имаме две редици:

  • редица на Трибоначи (по аналогия с редицата на Фибоначи), където всяко число е сумата от предните три (при дадени начални три числа)
  • редица, породена от числова спирала, дефинирана чрез обхождане като спирала (дясно, долу, ляво, горе, дясно, долу, ляво, горе и т.н.) на матрица от числа, стартирайки от нейния център с дадено начално число и стъпка на увеличение, със записване на текущите числа в редицата всеки път, когато направим завой

Да се напише програма, която намира първото число, което се появява и в двете така дефинирани редици.

Пример

Нека редицата на Трибоначи да започне с 12 и 3. Това означава, че първата редица ще съдържа числата 1, 2, 3, 6, 11, 20, 37, 68, 125, 230, 423, 778, 1431, 2632, 4841, 8904, 16377, 30122, 55403, 101902 и т.н.

Същевременно, нека числата в спиралата да започнат с 5 и спиралата да се увеличава с 2 на всяка стъпка.

Home Contests CSharp-Book 9.1. Problems for Champions - Part I

Тогава втората редица ще съдържа числата 5, 7, 9, 13, 17, 23, 29, 37 и т.н. Виждаме, че 37 е първото число, което се среща в редицата на Трибоначи и в спиралата и това е търсеното решение на задачата.

Входни данни

Входните данни трябва да бъдат прочетени от конзолата.

  • На първите три реда от входа ще се подават три цели числа, представляващи първите три числа в редицата на Трибоначи, положителни ненулеви числа, сортирани в нарастващ ред.
  • На следващите два реда от входа, ще се подават две цели числа, представляващи първото число и стъпката за всяка клетка на матрицата за спиралата от числа. Числата, описващи спиралата, са положителни ненулеви.

Входните данни винаги ще бъдат валидни и винаги ще са в описания формат. Няма нужда да се проверяват.

Изходни данни

Резултатът трябва да бъде принтиран на конзолата.

На единствения ред от изхода трябва да принтирате най-малкото число, което се среща и в двете последователности. Ако няма число в диапазона [1 … 1 000 000], което да се среща и в двете последователности, принтирайте "No".

 

 

Това ми е кода:

 

using System;
using System.Collections.Generic;

namespace ExamTestFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            int b = int.Parse(Console.ReadLine());
            int c = int.Parse(Console.ReadLine());
            int sum = 0;
            int num = int.Parse(Console.ReadLine());
            int intStep = int.Parse(Console.ReadLine());
            int step = intStep;
            int next = 0;
            int count = 1;
            var tribonachi = new List<int>() { a, b, c };
            var spiral = new List<int>() { num };

            while (sum <= 1000000)
            {
                sum = a + b + c;
                a = b;
                b = c;
                c = sum;
                tribonachi.Add(sum);
            }


            while (next <= 1000000)
            {
                next = num + step;
                num = next;
                if (count!=0 && count % 2 == 0)
                {
                    step += intStep;
                }
                count++;
                spiral.Add(next);
            }
            
            var found = false;

            for (int i = 0; i < tribonachi.Count; i++)
            {
                for (int j = 0; j < spiral.Count; j++)
                {
                    if(tribonachi[i]==spiral[j])
                    {
                        Console.WriteLine(tribonachi[i]);
                        found = true;
                        break;
                    }
                }
                if(found)
                {
                    break;
                }
                
            }
            if(!found)
            {
                Console.WriteLine("No");
            }
        }
    }
}
 

Тагове:
0
Programming Basics
MartinBG avatar MartinBG 3751 Точки

Не спазвате условието да проверявате числа само до 1000000 и всъщност проверявате до първото число над тази граница.

Промените за 100/100:

using System;
using System.Collections.Generic;

namespace ExamTestFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            // ...
            int num = int.Parse(Console.ReadLine());
            int intStep = int.Parse(Console.ReadLine());
            int step = intStep; // changed from 0
            int next = num + step; // changed from 0

            while (sum <= 1000000)
            {
                tribonachi.Add(sum); // moved to the top
                sum = a + b + c;
                a = b;
                b = c;
                c = sum;
            }


            while (next <= 1000000)
            { 
                spiral.Add(next);  // moved to the top
                next = num + step;
                num = next;
                if (count!=0 && count % 2 == 0)
                {
                    step += intStep;
                }
                count++;
            }
            
            // ....
        }
    }
}

 

0
adelina_t avatar adelina_t 2 Точки

Благодаря!

1