Home Contests CSharp-Book 9.1. Problems for Champions - Part I
Здравейте,
На тази задача ми дава 90/100.Дава ми грешка на Test 11.Какво ли сменях и не мислих,но все пак ми дава грешка там.
Ако може да ми помогнете да разбера от къде е грешката(не знам входните данни на тест 11).
Това е здачата:
Задача: пресичащи се редици
Имаме две редици:
- редица на Трибоначи (по аналогия с редицата на Фибоначи), където всяко число е сумата от предните три (при дадени начални три числа)
- редица, породена от числова спирала, дефинирана чрез обхождане като спирала (дясно, долу, ляво, горе, дясно, долу, ляво, горе и т.н.) на матрица от числа, стартирайки от нейния център с дадено начално число и стъпка на увеличение, със записване на текущите числа в редицата всеки път, когато направим завой
Да се напише програма, която намира първото число, което се появява и в двете така дефинирани редици.
Пример
Нека редицата на Трибоначи да започне с 1, 2 и 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");
}
}
}
}
Благодаря!