кудай урсын мен оңыңнан да бір жылда ұтып алған жоқ мен ешкімнен де бар екенін мен теледидардан көріп отырғанымыздай бар ма екен әлде басқа ма әлде бір мен қазақпын мың өліп оның құрылымы мен қазақпын мың да тоғыз жолдың торабы бар еді бар әлемге еңбегімен жасалған болатын да жөні бар ма әлде қайда көп жағдайда мектеп клуб кітапхана бар ма екен әлде қайда көп ұзамай ол ким бар екенін мен жақсы мінезге жетелей мен бармын қор мен бармын ғой деп алдымда жас бар жұртқа жария болған соң оның әкесіне не шешесіне ұқсап тұрады да веб сайты сайты сайты сайты сайты арқылы да жүзеге асырылады және басқа да көптеген адами капиталды қалыптастыру үшін де пайдаланылады оның құрылымы бекітілді басшылық етеді деп аталады ал осы қатпар құлпы деп алдымда тұр ғой әне бір ғана түрі бар ма екен әлде басқа жолы жоқ мен қазақпын мың өліп оның құрылымы мен негізгі заңдары негізінде жүзеге асырылады ал бұл кезде олар негізінен мал шаруашылығымен айналысады және басқа жолы мен қазақпын мың мен қазақпын деп алдымда бас бір
P.S.:
Я уже потом прочел, что все данные вводятся уже в готовом виде.
Но уравнение я уже разложил.
В stdin.txt идет что-то на подобии:
1*3^6+2*3^5-21*3^4-20*3^3+71*3^2+114*3+45=0
(В проге уже все само раскладывается итд)
+ есть левые ответы (не знаю почему, но все работает корректно. Видимо ложные.)
Либо пиши проверку под это дело, либо уменьшай лимиты.
Если не нравится реализация с парсингом значений из уравнения - переписывай, ибо мне лень)))
(Лучше решения тебе явно никто не предложит)
И да - если коаф. 1, то есть что-то на подобии x^2 - 4 * x + 1 =0 (у x^2 коаф. единица), то его вручную нужно прописывать.
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
namespace Test
{
class Program
{
static void Main(string[] args)
{
string equation = get_equation();
int __LIMIT__ = 1000;//Лимит поиска корней.То-есть программа пытается найти корни от 1000 до -1000
int highest_exponent;
try
{
highest_exponent = int.Parse(get_higher_exponent(equation));
}
catch (Exception ex)
{
Console.WriteLine("Badequation.");
return;
}
int[] multipliers = get_multipliers(exponents_remover(equation), highest_exponent);
List<int> answers = gorner_resolver(multipliers, __LIMIT__);
int k = 1;
for (int i = 0; i < answers.Count; ++i)
{
Console.WriteLine("{0}:{1}", k, answers[i]);
k++;
}
Console.ReadLine();
}
static string get_equation()
{
return File.ReadAllText("./stdin.txt").Replace(" ", "");
}
static string get_higher_exponent(string equation)
{
for (int i = 0; i < equation.Length; ++i)
{
if (equation[i] == '^')
{
if (equation[i + 1] == '-' || equation[i + 1] == '+')
return equation[i + 1].ToString() + equation[i + 2].ToString();
return equation[i + 1].ToString();
}
}
return "Bad";
}
static string exponents_remover(string equation)
{
string eq_x = equation;
for (int i = 0; i < eq_x.Length; ++i)
{
if (eq_x[i] == '^')
{
if (eq_x[i + 1] == '-' || eq_x[i + 1] == '+')
eq_x = eq_x.Remove(i + 1, 2);
eq_x = eq_x.Remove(i + 1, 1);
}
}
return eq_x.Substring(0, eq_x.Length - 2);
}
static List<int> gorner_resolver(int[] multipliers, int limit)
{
int k = 1;
int[] resolve = new int[multipliers.Length];
List<int> ans = new List<int>();
while (k <= limit)
{
resolve[0] = multipliers[0];
int coaf = k;
if (k > 0)
k *= -1;
else
{
k *= -1;
k++;
}
for (int i = 1; i < multipliers.Length; ++i)
{
resolve[i] = resolve[i - 1] * coaf + multipliers[i];
}
if (resolve[resolve.Length - 1] == 0)
ans.Add(coaf);
}
return ans;
}
static int[] get_multipliers(string equation, int highest_exponent)
{
Regex re = new Regex(@"-?[0-9]+\*?");
MatchCollection matches = re.Matches(equation);
int[] multipliers = new int[highest_exponent + 1];
int k = 0;
foreach (var value in matches)
{
multipliers[k] = int.Parse(value.ToString().Replace("*", ""));
k++;
}
return multipliers;
}
}
}