"ugly numbers" aufgabe in c



  • Hallo,
    ich bring mir zur Zeit C selber bei und hab folgendes Problem bei folgender Aufgabe:

    "Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence
    1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, …
    shows the first 11 ugly numbers. By convention, 1 is included.
    Write a program to find and print the 150’th ugly number."

    Ich wollte jetzt zu Beginn erst einmal das Ganze mit scanf() versuchen, also ausgeben ob die eingegeben zahl eine "ugly number" ist oder nicht.
    Jedoch funktioniert das bereits schon nicht.

    #include<stdio.h>
    int main (void){
    printf"Enter Number:");
    scanf("%d",&n);
    
    for(i=1;i<=n;i++){
    number=x;
    x=i;
    
    while(x%2==0)
    x=x/2;
    while(x%3==0)
    x=x/3;
    while(x%5==0)
    x=x/5;
    if(x==1){
    printf("%d\n",number);
    }
    }
    }
    

    Kann mir jemand sagen was ich falsch mache?

    MfG Johne.



  • number=i;



  • volkard schrieb:

    number=i;

    funktioniert leider auch nicht



  • Dein Programm überprüft nicht ob die eingegebene Zahl eine "ugly number" ist,
    sondern gibt alle "ugly numbers" bis zu der eingegebenen Zahl aus.
    Edit: Du musst die Variablen natürlich erst erstellen bevor du sie nutzen kannst 😃



  • okay. das problem ist gerade auch noch es gibt nicht mal alle "ugly numbers" aus bis zu der zahl die ich eingebe. Ich gebe z.B.: 20 ein und es passiert nichts.



  • #include<stdio.h>
    
    int main (void)
    {
        int n,i,x;
        int number;
        printf("Enter Number:");
        scanf("%d",&n);
    
        for(i=1;i<=n;i++)
        {
            number=i;
            x=i;
    
            while(x%2 == 0)
                x /= 2;
    
            while(x%3 == 0)
                x /= 3;
    
            while(x%5 == 0)
                x /= 5;
    
            if(x == 1)
                printf("%d\n",number);
        }
        return 0;
    }
    


  • Vielen Dank hat funktioniert! In der Aufgabenstellung steht noch "Write a program to find and print the 150’th ugly number. Use is_ugly(unsigned int ...)" hab da leider noch keine Lösung gefunden wie man das Programm schreiben muss.



  • Du zählst wie oft is_ugly true zurückgibt und gibst bei 150 den Wert aus.
    Aber das wirst du wohl noch nicht umsetzen können, lerne erst mal die Grundlagen.



  • Alles klar, danke nochmal 😉


Log in to reply