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 на всяка стъпка.

Тогава втората редица ще съдържа числата 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 4803 Точки

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