2017-10-02 2 views
0

Ich habe eine Aufgabe, um den Körper der folgenden Funktion (detectHappy) ausfüllen, die nur für 10 Zyklen (Iterationen) überprüft, ob eine Zahl eine glückliche Zahl ist oder nicht. Ich muss:Iterative Lösungen mit C++

-Finden Sie die Summe der Ziffern der Zahl.

- Überprüfen Sie das in Punkt 1 erhaltene Ergebnis. Wenn es 1 ist, weisen Sie der Variablen 'finalNumber' den Wert 1 zu, andernfalls führen Sie Punkt 1 aus, bis die Zahl 1 erreicht oder die Anzahl der Zyklen auf 10 erhöht wird.

- Weisen Sie den Iterationswert der Variablen 'cycle_no' zu.

Ich sollte keine zusätzlichen Funktionen eingeben, ausgeben oder deklarieren. Ich muss nur den Körper der Funktion schreiben, die bereits dort erklärt wird, die es auf dem in meinem Kurs angebotenen Shell arbeiten lässt ...

Das Programm habe ich versucht, kompiliert zu schreiben, aber gibt nicht die richtigen Ergebnisse. Mir fehlen jetzt die Ideen und ich werde für jede Hilfe dankbar sein. Vielen Dank im Voraus.

Code:

/*Question  : Write your code to find whether the number is a happy 
number or not (for max 10 cycles). 

int number  : The number to be determined whether it is happy or not 

int finalNumber : Store the resultant value in this variable 

int cycle_no : Store the number of iterations done to determine whether 
the 'number' is happy or not */ 



void detectHappy(int number, int &finalNumber, int &cycle_no) { 

//Write your solution code below this line 


int sum = 0; 
int i = 0; 

do{ 
    sum += (number%10)*(number%10); 
    number /=10; 


    if (sum == 1){ 

     finalNumber = 1; 
     break; 

    } 

    else { 

     number = sum; 
     i++; 
    } 

    cycle_no = i; 


} 

while (i < 10); 

}

+1

Von einem Charles zum anderen, werden wir Ihre Hausaufgaben für Sie auf Stack-Überlauf nicht! – Charles

+0

hmmm während (10) huh? – RSon1234

+2

'while (10)' ist falsch. Es ist effektiv eine Endlosschleife, da der numerische Wert "10" in der while-Klausel immer als wahr ausgewertet wird. Zum Glück hast du dort eine Pause. Wenn Sie jedoch 10 Wiederholungen durchführen möchten, ist das nicht der richtige Weg. Ich würde hier keine do while-Schleife verwenden, nur eine normale for-Schleife. 'für (int i = 0; i <10; i ++)', das bedeutet auch, dass Ihre 'i'-Variable nur für die for-Schleife gilt. –

Antwort

0

Lassen Sie sich während Schleife des do befreien und eine for-Schleife hinzufügen

int i; for (i=0; i <10; i++)

{

`Code stuff` 

}

+1

Während For-Schleife ist eine gute Wahl in diesem Szenario, während und Do-while sind auch in Ordnung. Dies ist nicht das Hauptproblem mit dem OP-Code. – CroCo

+1

Diese Antwort erklärt nicht, warum das Ändern der for-Schleife funktioniert, und erklärt auch nicht, was den ursprünglichen Code zum Fehlschlagen gebracht hat. –

0

Ihr Code ist voller Bugs. Lesen Sie die Kommentare im folgenden Code

void detectHappy(int number, int &finalNumber, int &cycle_no) { 

    //Write your solution code below this line 

    int r, sum = 0; // Are you sure you need to declare r variable in here?!! You are modifying this variable inside the do-while(). 

    int i = 1; // where do you increment this value in your code?!! 

    do { // the choice of do-while is fine in here because any integer number must have at least one digit. 

     r = number%10; 
     sum += r*r; // Is this correct? 
     number = number/10; 

     if (sum == 1){ 
      finalNumber = 1; 
      break; 
     } // there is an else statement in here. Read the instructions carefully. 


     if (sum !=1 || i != 10){ // (i != 10) this is always TRUE. You are not incrementing i in your code!! 
      r = number%10; 
      sum += r*r; // Is this correct? 
      number = number/10; 
      number = sum; 
     } 

     cycle_no = sum; // Are you sure?!! cycle_no is iteration number NOT the sum. 
         // Read this carefully: Assign the iteration value to the variable 'cycle_no'. 

    } 
    // this while is always true. It has no meaning in this sense. 
    while (10); //I want it to iterate successively for a maximum of 10 times if the lucky number is not found 
} 
0

Jetzt ist es mit dieser Methode hat ...

/* Frage: Schreiben Sie Ihren Code zu finden, ob die Zahl eine glückliche Zahl ist oder nicht (für max 10 Zyklen).

int Nummer: Die Nummer bestimmt, ob er zufrieden ist oder nicht

int finalNumber: in dieser Variablen

int cycle_no den resultierenden Wert-Speicher: Speichern geschieht, um die Anzahl der Iterationen, ob die um zu bestimmen, 'Zahl' ist glücklich oder nicht */

Leere detectHappy (int Nummer, int & finalNumber, int & cycle_no) {

//My code 

for (cycle_no=0; cycle_no < 10; cycle_no ++) 

{

finalNumber = 0; 

while (number) 

{ 

    finalNumber += (number % 10) * (number % 10); 

    number /= 10; 

} 

if (finalNumber == 1) 

    return; 

number = finalNumber; 

}

}