2016-07-08 3 views
-4
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

main() { 
    int n, m, i, j, k; 
    char a[100], b[100]; 
    scanf("%d", &n); 
    if (n > 26 && n <= 1) 
     exit(0); 
    scanf("%s", a); 
    scanf("%d", &m); 
    if (m > 100 && m <= 1) 
     exit(0); 
    for (i = 0; i < m; i++) { 
     fgets(b, 100, stdin); 
     for (j = 0; b[j] != '\0'; j++) { 
      for (k = 0; k < n; k++) { 
       if (a[k] == b[j]) { 
        if (k == (n - 1)) { 
         b[j] = a[0]; 
         break; 
        } else { 
         b[j] = a[k+1]; 
         break; 
        } 
       } 
      } 
     } 
     printf("%s",b); 
    } 
    return 0; 
} 

Ich habe gerade geschrieben C-Code für das Problem: http://www.spoj.com/BSCPROG/problems/SMPCPH1/ Mit dem gegebenen Beispiel Mein Programm gibt das gewünschte Ergebnis, aber spoj sagt, es ist falsch. Wie kann ich Fehler finden?SPOJ zeigt falsche Antwort auf die meine Lösung: http://www.spoj.com/BSCPROG/problems/SMPCPH1/

+0

Beflaggung diese Frage als * schließen Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?"), Müssen das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten, der nötig ist, um es in der Frage selbst zu reproduzieren. * –

+1

'if (n> 26 && n <= 1) 'ist immer falsch, da jede Zahl nicht kleiner als oder = 1 und größer als sein kann '26' zur gleichen Zeit – Cherubim

+0

Wenn ich Ihren Code ausführen, löst es die Beispiele nicht. Es gibt zwei Zeilen korrekt aus, aber es gab keine dritte Zeile. –

Antwort

0

Sie müssen 3 Änderungen im Code:

  • Verwenden || statt && in Ihren Tests Validierung Argument.
  • Scan und der Zeilenvorschub nach dem in m analysiert Zahl ignorieren, sonst wird die nächste fgets() eine leere Zeile Hier

gelesen werden wird, um den korrigierten Code:

if (n > 26 || n <= 1) 
    exit(0); 
scanf("%s", a); 
scanf("%d%*c", &m); 
if (m > 100 || m <= 1) 
    exit(0); 
+0

@ ŚȟůbȟämŖäĵpůţ: Hat diese Antwort Ihr Problem gelöst? – chqrlie