[Exam Problems] C# Basics - Въпрос по задача {4} Crossing Sequences (11 Април Вечерта)
Здравейте,
Не разбирам от условието как се намират спиралните числа, числата на трибоначи са ясни, но явно аз не мога да видя каква точно е формулата по тази стъпка която даваме за спиралните числа смисал :
Also, let the number spiral start with 5 and have a step of 2; it then contains he numbers 5, 7, 9, 13, 17, 23, 29, 37, etc. Since 37 is the first number that is both in the Tribonacci sequence and in the spiral, it is the answer.
даден е пример но не е обяснено как точно става, предполагам е доста лесно, но аз не мога да го схвана ако някой може да обясни ще съм му много благодарен
Ако предположим, че алгоритмите ти за намиране на двете поредици са верни (а доколкото на пръв поглед виждам са), може да ползваш два списъка, в които да ги пълниш. Разгледай как се ползва List. След това е сравнително лесно, вървиш по единия списък и спираш щом засечеш елемент, който го има и в другия. Аз лично така реших задачата, не е най-доброто сигурно, но работи.
По-ефикасният начин, за който се сещам, но и по-трудният за осмисляне, е да увеличаваш двете редици и да спреш, когато намериш първия общ елемент. Пипкаво е, защото не ги увеличаваш едновременно редиците, а една след друга според някакви условия.
Мерси за идеите :)
Ще опитам първо с list и после може да си поиграя с увеличаване на циклите.
Скъсах си нервите и не мога да намеря къде ми са тези 9 точки до 100. Въпросът вече е на чест :)
Ще може ли някой да ми погледне кода ТУК.
Здравей, и моята идея е нещо подобно. След решението установих, че judge ми дава 100/100 но не влизам във времевата рамка.
"100 / 100Памет: 12.05 MB
Време: 0.450 s"
Въпроса ми е следния:
Счита ли се това за вярно решение или не?
прилагам и кода си.
http://pastebin.com/f8WwyNAj
След като не покриваш официално поставените изисквания за време и памет значи решението ти не е напълно правилно. Един вариант е системата да се е бъгнала за дадения събмит, просто пробваш няколко пъти, може и да мине. Другият вариант е да оптимизираш малко нещата.
Може ли някой да ми каже каде ми е грешката и за защо не тръгва следния код ? Благодаря предварително !
using System;
class Example
{
static void Main()
{
int t1 = int.Parse(Console.ReadLine());
int t2 = int.Parse(Console.ReadLine());
int t3 = int.Parse(Console.ReadLine());
int d = int.Parse(Console.ReadLine());
int e = int.Parse(Console.ReadLine());
bool increasePower = false;
int power = 1;
int s = 0;
if (t1 < 0 || t2 < 0 || t3 < 0 || t1 > 1000000 || t2 > 1000000 || t3 > 1000000)
{
Console.WriteLine("No");
}
while (true)
{
int sum = t1 + t2 + t3;
t1 = t2;
t2 = t3;
t3 = sum;
d += e * power;
if (increasePower)
{
power++;
}
increasePower = !increasePower;
if (d == sum || d == t2 || d == t3 || d == t1)
{
s = sum;
break;
}
}
Console.WriteLine(s);
}
}
Така като гледам проблема ти е че loop-а ти е безкраен. Програмата тръгва, но нямаш изход от loop-a.
If услоявията ти трябва да са вътре с един break. Другия ти проблем е от увеличаването на стъпките. На матрицата се усвеличава през 2 а не през един цикъл. Например тръгва от 5 , стъпка 2. Имаш 5(начало), завой, 7, завой, 9, от тук вдигаме стъпката и т.н.
Най-големия ти проблем е че ги сръвняваш постоянно на всяко завъртане, но стъпката се увеличава с 2,2,3,3 и на 4тия ход стъпката ще ти е 17 а трибоначито ще е 37.
Най добре на всяко завъртане на стъпката да проверяваш има ли такова число като цикъла върти докато не го подминеш за да си спестиш ресурси