Zadanie ze spoja . Jest ktos w stanie podpowiedziec jak przyspieszyc ten program, albo jak rozwiazac to zadanie. Proboje juz kilku algorytmow i za kazdym razem przekraczam limit czasu (nawet w C++) przy tescie 8. Mimo ze wszytkie testy sa poprawne nadal nie wiem czy moj algorytm jest dobry. Czy musze tutaj zastosowac inne podejscie?
using System;
using System.Text;
namespace CSharpPlayground
{
public class Program
{
static void Main()
{
string[] txt = Console.ReadLine().Split(' ');
string numberN = txt[0];
string numberK = txt[1];
StringBuilder numberSB = new StringBuilder(numberN);
int k = Int32.Parse(numberK);
ulong n = ulong.Parse(numberN);
ulong tmpN = n; // Tutaj ustawiam
tmpN = tmpN / 10; // cyfre jednosci
tmpN *= 10; // na zero
if (numberN.Length < k) // jesli liczba jest mniejsza niz liczba cyfr to ustawiam na najmniejsza z mozliwych
{
numberSB.Clear();
for (int i = 0; i < k; i++)
numberSB.Append(5);
Console.WriteLine(numberSB);
}
else if(CountFives(n + 1) >= k)
{
Console.WriteLine(n + 1);
}
else // szukam prawidlowej odpowiedzi iterujac co 5
{
ulong counter = 0;
while (true)
{
if (tmpN > n && CountFives(tmpN) >= k)
{
break;
}
else
{
tmpN += 5;
counter++;
}
}
Console.WriteLine(tmpN);
}
}
private static int CountFives(ulong n)
{
int counter = 0;
ulong number = n;
while(number != 0)
{
if (number % 10 == 5)
counter++;
number = number / 10;
}
return counter;
}
}
}