2016-10-07 3 views
-2

Ich löse ein C++ algorithmisches Problem und ich weiß nicht, warum ich keine richtige Antwort bekomme. Das Problem besteht in: Es gibt eine Reihe von n Zahlen. Sie müssen jede Zahl nehmen und das Quadrat ihrer Ziffern addieren, bis Sie die Summe 4 oder 1 erhalten. Dann müssen Sie drucken, wie oft Sie diese Zahl hinzugefügt haben. Er ist ein Beispiel: Sie haben eine Reihe von 2 Zahlen: 89 und 68. Sie beginnen mit 89: 64 + 81 = 145; (1) 1 + 16 + 25 = 42; (2) 16 + 4 = 20; (3) 4 + 0 = 4; (4) und wir stoppen, weil es 4 ist. Wir müssen 4 drucken, weil wir 4mal immer wieder hinzugefügt haben, bis wir 4 oder 1 haben. Das gleiche gilt für 68. Mein Code ist in C++ aber es verwendet für Dateien c.Aufgabe ähnlich glücklich Nummer

#include<stdio.h> 
#include<math.h> 

FILE *f,*g; 
int n,i,a[500],sqr,nr; 
int main() 
{ 
    f = fopen("unupatru.in","r"); 
    fscanf(f,"%d\n",&n); 
    for(i=1;i<=n;i++)fscanf(f,"%d",&a[i]); 
    fclose(f); 
    for(i=1;i<=n;i++) 
    { 
    nr=0; 
    sqr=0; 
    while(sqr!=4 || sqr !=1) 
    { 
     while(a[i]) 
     { 
     sqr+=pow(a[i]%10,2); 
     a[i]/=10; 
     } 
     a[i]=sqr; 
     nr++; 
    } 
    g=fopen("unupatru.out", "w"); 
    fprintf(g,"%d\n",nr); 
    fclose(g); 
    } 
    return 0; 
} 

Bitte helfen Sie mir Das Problem mit meinem Code ist, dass, wenn ich auf Run klicken und kompilieren Sie es nicht läuft stoppt bitte

+0

Sie die falschen Header verwendet wird; du brauchst z.B. ''. – MSalters

+0

Wenn Sie C++ verwenden, entfernen Sie zuerst Anrufe zu C-Funktionen – wasthishelpful

+0

Danke für die Vorschläge, aber das Problem ist nicht in diesem Ding, ich habe Probleme wie das für eine Woche gelöst und es war kein Problem, das Problem ist etwas mit der Logik des Codes, bitte lass es mögen, sag mir besser, wie es zu beheben ist, der Code ist wirklich ähnlich wie c –

Antwort

1

helfen nicht sicher genug ist, aber ...

Sie setzen sqr = 0 auch im Inneren des externen während und (wie darauf von Igor Tandetnik) sollten ändern Sie den Test mit && statt ||

Oder besser: Sie shuold verwenden do/while (mit sqr=0 nur innen)

do 
{ 
    sqr=0; 
    while(a[i]) 
    { 
    sqr+=pow(a[i]%10,2); 
    a[i]/=10; 
    } 
    a[i]=sqr; 
    nr++; 
} 
while(sqr!=4 && sqr !=1) 
+0

danke leyt mich versuchen –

+0

Dank Sie löste das Problem, das ich hatte, aber ich bekomme nicht die Antwort schreiben –

+0

@MelinVen - Entschuldigung: Ich meine: Sie sollten ** hinzufügen ** 'sqrt = 0 'innerhalb der während der Aufrechterhaltung der' sqr = 0' außerhalb; vielleicht ist 'do' /' while' besser. – max66

0
#include<iostream> 
#include<cmath> 
#include<fstream> 
using namespace std; 
FILE *f,*g; 
int n,i,a[500],sqr,nr,b[500]; 
int main() 
{ 
    f = fopen("unupatru.in","r"); 
    fscanf(f,"%d\n",&n); 
    for(i=1;i<=n;i++)fscanf(f,"%d",&a[i]); 
    fclose(f); 
    for(i=1;i<=n;i++) 
    { 
     nr=0; 
     sqr=0; 
     while(sqr!=4 && sqr !=1) 
     { 
      sqr=0; 
      while(a[i]) 
      { 
       sqr+=pow(a[i]%10,2); 
       a[i]/=10; 
      } 
       a[i]=sqr; 
       nr++; 
       b[i]=nr; 
     } 
    } 

     g=fopen("unupatru.out", "w"); 
     for(i=1;i<=n;i++) 
     fprintf(g,"%d ",b[i]); 
     fclose(g); 
    return 0; 

}

Verwandte Themen