Mam problem z pewnym zadanie ze SPOJ'a:
https://pl.spoj.pl/problems/JSZYFR2/
Dla wszystkich testów co sprawdzałem jest ok, ale SPOJ wypisuje błędną odpowiedź.
Oto kod:
#include <cstdio>
bool kod(int n, int k);
int t[25];
//----------------------------------------------------------------------
int main()
{
int D, n;
scanf("%d", &D);
while(D--)
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &t[i]);
}
if(kod(n, 127))
{
printf("127 ");
for(int i = 0; i < n; i++)
{
printf("%c", (char) (t[i] % 127));
}
printf("\n");
continue;
}
if(kod(n, 131))
{
printf("131 ");
for(int i = 0; i < n; i++)
{
printf("%c", (char) (t[i] % 131));
}
printf("\n");
continue;
}
if(kod(n, 137))
{
printf("137 ");
for(int i = 0; i < n; i++)
{
printf("%c", (char) (t[i] % 137));
}
printf("\n");
continue;
}
if(kod(n, 139))
{
printf("139 ");
for(int i = 0; i < n; i++)
{
printf("%c", (char) (t[i] % 139));
}
continue;
}
if(kod(n, 149))
{
printf("149 ");
for(int i = 0; i < n; i++)
{
printf("%c", (char) (t[i] % 149));
}
printf("\n");
continue;
}
printf("NIECZYTELNE\n");
}
return 0;
}
//----------------------------------------------------------------------
bool kod(int n, int k)
{
for(int i = 0; i < n; i++)
{
if(t[i] % k < (int) 'A' || t[i] % k > (int) 'Z')
return false;
}
return true;
}
Nie działa także, jeśli biorę pod uwagę możliwość kilku liczb pierwszych, które deszyfrują dane wejściowe:
#include <cstdio>
bool kod(int n, int k);
int t[25];
//----------------------------------------------------------------------
int main()
{
int D, n;
scanf("%d", &D);
while(D--)
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &t[i]);
}
int lp = 0;
if(kod(n, 127))
{
printf("127 ");
for(int i = 0; i < n; i++)
{
printf("%c", (char) (t[i] % 127));
}
printf("\n");
lp++;
}
if(kod(n, 131))
{
printf("131 ");
for(int i = 0; i < n; i++)
{
printf("%c", (char) (t[i] % 131));
}
printf("\n");
lp++;
}
if(kod(n, 137))
{
printf("137 ");
for(int i = 0; i < n; i++)
{
printf("%c", (char) (t[i] % 137));
}
printf("\n");
lp++;
}
if(kod(n, 139))
{
printf("139 ");
for(int i = 0; i < n; i++)
{
printf("%c", (char) (t[i] % 139));
}
printf("\n");
lp++;
}
if(kod(n, 149))
{
printf("149 ");
for(int i = 0; i < n; i++)
{
printf("%c", (char) (t[i] % 149));
}
printf("\n");
lp++;
}
if(lp == 0)
printf("NIECZYTELNE\n");
}
return 0;
}
//----------------------------------------------------------------------
bool kod(int n, int k)
{
for(int i = 0; i < n; i++)
{
if(t[i] % k < (int) 'A' || t[i] % k > (int) 'Z')
return false;
}
return true;
}
Z góry dzięki