2016-07-20 7 views
-1

Folgendes ist my solution zu a problem on codechef.
Ich bekomme die richtige Ausgabe auf meinem Computer, aber nicht auf Codechef.
Ich konnte den Fehler in meinem Code nicht finden.Schneiden Rezepte Übung auf CodeChef

Das Problem besteht darin, ein Array durch den GCD seiner Elemente zu teilen und es zu drucken.

Ich schrieb den folgenden Code:

#include<stdio.h> 

int main(void) 
{ 
    int t,n; 
    scanf("%d",&t); 

    while(t--) 
    { 
    scanf("%d",&n); 
    int a[n],i,divisor,curr,r; 

    for(i=0;i<n;i++) 
    { 
     scanf("%d",&a[i]); 
    } 

    divisor = a[0]; 
    for(i=1;i<n;i++) 
    { 
     curr = a[i]; 
     if(curr<divisor) 
     { 
     divisor = curr; 
     } 
    } 

    for(i=0;i<n;i++) 
    { 
     r = a[i]%divisor; 
     if(r != 0){ 
     divisor = 1; 
     break; 
     } 
    } 

    for(i=0;i<n-1;i++) 
    { 
     printf("%d ",a[i]/divisor); 
    } 

    printf("%d\n",a[n-1]/divisor); 

    } 

    return 0; 
} 
  • t ist die Anzahl der Testfälle.
  • n ist die Länge des Arrays.
  • a[n] ist das Array.
  • divisor ist der GCD aller Elemente im Array.
  • curr ist die aktuelle Nummer getestet.
  • r ist der Rest.

Beispieleingabe

3 
2 4 4 
3 2 3 4 
4 3 15 9 6 

Beispielausgabe

1 1 
2 3 4 
1 5 3 2 
+3

Erstellen Sie eine separate Funktion, um GCDs zu berechnen und zu verwenden. Geben Sie Ihren Variablen tatsächliche Namen. Mit diesen zwei Schritten hat Ihr Fehler eine viel größere Chance, offensichtlich oder gelöst zu sein. – Ryan

+4

Sie wurden durch die Beispieleingabe in die Irre geführt, der GCD ist nicht nur das kleinste Element im Array. Ein besseres Beispiel wäre dieses Array mit vier Elementen: {6,9,21,15}. Die erwartete Ausgabe ist: {2,3,7,5}. – user3386109

+4

Bitte geben Sie Ihrer Frage einen besseren Titel. "Was ist mit diesem Code falsch?" beschreibt im Grunde alles auf dieser Seite. Ein anderer Benutzer mit demselben Problem kann diese Frage nicht finden. –

Antwort

0

Sie auf dem richtigen Weg waren denken, es eine Übung beteiligt CGD (größter gemeinsamer Teiler) war.

Sie verstehen jedoch falsch, wie Sie den GCD berechnen.
ist es selten das kleinste Element eines Arrays.

Zum Beispiel:

15, 6, 9 

Das kleinste Element ist 6 und ist kein gemeinsamer Teiler des anderen Elements (und würde 1 als Divisor in Ihrem Fall gewählt hat), aber der GCD ist in diesem Fall 3

Sie könnten damit beginnen, einige Informationen über die Berechnung der CGD eines Paares von Element zu lesen. Und eine example implementation.

Dann versuchen Sie herauszufinden, wie Sie die GCD aller Elemente eines Arrays berechnen.

Diese Hinweise könnten helfen