2016-10-02 1 views
1

OK, so dass der Zweck dieses Codes ist, Benutzer für eine Ganzzahl dann zu fragen, das Programm wird jede Ziffer 0-9 und es Nummer des Auftretens in der vom Benutzer bereitgestellten Nummer ausdrucken. der Ausgang sollte so etwas wie diesestecken auf diesem C-Code

Enter a number: 28666 

0 is repeated 0 times. 
1 is repeated 0 times. 
2 is repeated 1 times. 
3 is repeated 0 times. 
4 is repeated 0 times. 
5 is repeated 0 times. 
6 is repeated 3 times. 
7 is repeated 0 times. 
8 is repeated 1 times. 
9 is repeated 0 times. 

hier sehen ist mein Code und Ausgang so weit.

#include <stdbool.h> 
#include <stdio.h> 

int main(void) 
{ 
    bool digit_seen[10] = {false}; 
    int digit; 
    long n; 


    printf("Enter a number: "); 
    scanf("%ld", &n); 
    while (n > 0) { 
     digit = n % 10; 
     if (digit_seen[digit]) 
     break; 
     digit_seen[digit] = true; 
     n /= 10; 
    } 

    if (n > 0) 
     for(int i=0; i<digit; i++) 
     digit_seen[i]++; 
     for(int i=0; i<digit; i++) 
     printf(" %d is occur %d times \n",i,digit_seen[i]); 
    if (n < 0) 
     printf("No repeated digit\n"); 
    return 0; 
} 

hier ist mein Ausgang

Enter a number: 147795655                                  
0 is occur 1 times                                    
1 is occur 1 times                                    
2 is occur 1 times                                    
3 is occur 1 times                                    
4 is occur 1 times 

wie Sie, ich bin nicht immer die Ausgabe ich brauche sehen kann und ich verstehe nicht, why.If mir jemand, wo ich werde verstehen helfen könnte falsch das wäre eine große Hilfe, danke.

+0

'bool digit_seen [10] = {falsch};' -> 'int digit_seen [10] = {0};'. Denken Sie daran: Sie zählen die Vorkommen, wie in 'digit_seen [i] ++;'. –

+0

Sind negative Zahlen nicht erlaubt, Ziffern zu wiederholen? Warum wird das letzte 'if (...)' verwendet? –

Antwort

0

Sie benötigen zwei Schleifen - eine für das Zählen und eine für das Ausdrucken der Zählerstände.

Da Ihre erwarteten Ausgangslisten alle Ziffern sind, benötigen Sie keine separate digit_seen Schleife. Sie können die Nummer einfach mit n%10 und n/10 zerlegen, wie Sie es taten, und erhöhen Sie digit_count[digit], wie Sie gehen. Sie müssen einen Sonderfall für Null hinzufügen, da dies der Ausgangszustand Ihrer Schleife ist.

3

Sie verwenden bool Werte, die Ziffern zu speichern existieren oder welche nicht, aber wenn Sie zählen möchten, wie oft jede Stelle kam, werden Sie statt bool verwenden müssen int.

So definieren digit_seen als:

int digit_seen[10] = {0}; 

und die Schleife ändern, in dem Sie die Anzahl der Ziffern dies sind die Berechnung:

while (n > 0) { 
    digit = n % 10; 
    digit_seen[digit]++; 
    n /= 10; 
} 

Und danach, können Sie einfach drucken die digit_seen Array wie folgt:

for (int i = 0; i < 10; i++){ 
    printf(" %d is occur %d times \n",i,digit_seen[i]); 
} 

EDIT:

Siehe suggested code in action here.

0

An den beiden

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

Ziffer ist nur der letzte Wert in der while-Schleife bekam, so die erste Ziffer der Nummer. Wie gut, n aus, während Wert Verlassen wird immer 0 sein, also nie in

if (n > 0) 
    for(int i=0; i<digit; i++) 
    digit_seen[i]++; 

weder in

if (n < 0) 
    printf("No repeated digit\n"); 

So Eingabe nur in

for(int i=0; i<digit; i++) 
    printf(" %d is occur %d times \n",i,digit_seen[i]); 

eingeben und dann zeigt, wenn Ziffer vorhanden, oder nicht, in Original-n-Nummer, wie in Ihrem Ergebnis gezeigt. Sie sollten Ihren Algorithmus überprüfen.

0

Ihr Hauptfehler besteht darin, dass Sie versuchen, die Elemente eines booleschen Arrays "bool digit_seen [10]" zu erhöhen. Warum nicht versuchen, diese:

  • eine Integer-Array deklariert [10] mit Nullen initialisiert. Jeder Index des Arrays repräsentiert eine Ziffer und sein Wert repräsentiert seine Häufigkeit.
  • In jeder Iteration der while-Schleife, digit = n% 10 und dann n = n/10.
  • Jedes Mal, wenn Sie dies tun, erhöhen Sie den entsprechenden Wert in Ihrem Array um eins (z. B. Array [Ziffer] ++).
  • Dann müssen Sie nur die Häufigkeiten der entsprechenden Ziffern (aka Array-Indizes) ausdrucken.