Witam mam taki problem z zadaniem ze SPOJ'a. Test wychodzi prawidłowy a mimo to dostaję błędną odpowiedź. Mój kod zadania (piszę w C#). Czy to rozwiązanie jest poprawne ?
using System;
namespace Task
{
class Program
{
static void Main()
{
double[] decodedFrequency = new double[26];
double[] encodedFrequency = new double[26];
int[] charsNumber = new int[26];
string inputText = "";
string line;
int onlyCharsCount;
// wczytywanie częstotliwości liter w orginalnym tekscie
for (int i = 0; i < 26; i++)
decodedFrequency[i] = double.Parse(Console.ReadLine().Split(' ')[1].Replace('.',','));
//wczytywanie wejscia (to co sedzia daje)
while ((line=Console.ReadLine())!=null)
inputText+=line;
onlyCharsCount=inputText.Length;
//zliczanie wszystkich liter w danym tekscie
foreach (char c in inputText)
{
if(c > 96 && c < 123)
charsNumber[c-97]++;
else if(c>64 && c<91)
charsNumber[c-65]++;
else onlyCharsCount--;
}
//zliczanie czestotliwosci danej litery w tekscie
for (int i = 0; i < 26; i++)
{
encodedFrequency[i] = Math.Round(((double)charsNumber[i]/onlyCharsCount),5);
}
//dekodowanie
string decodedText = "";
foreach (char c in inputText)
{
if(c >= 'a' && c <= 'z')
{
for(int i=0;i<26;i++)
if(encodedFrequency[c-97]==decodedFrequency[i])
{decodedText+=(char)(97+i);break;}
}
else if(c>='A' && c<='Z')
{
for(int i=0;i<26;i++)
if(encodedFrequency[c-65]==decodedFrequency[i])
{decodedText+=(char)(65+i);break;}
}
else decodedText+=c;
}
Console.WriteLine(decodedText);
}
}
}