Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Να γίνει πρόγραμμα το οποίο θα διαβάζει από το χρήστη το πλήθος των εισιτηρίων που θέλει να αγοράσει
κάποιος (ακέραιος αριθμός στο διάστημα [1,5]) καθώς και το χρηματικό ποσό που διαθέτει (πραγματικός
αριθμός στο διάστημα [0.75,100]). Θεωρείστε ότι το κόστος του ενός εισιτηρίου είναι 75 λεπτά. Το
πρόγραμμα θα ελέγχει αν οι δύο αριθμοί έχουν έγκυρες τιμές και αν τα χρήματα επαρκούν για την αγορά
των εισιτηρίων. Σε διαφορετική περίπτωση το πρόγραμμα θα πρέπει να τερματίζει εμφανίζοντας το μήνυμα
«Wrong input».
Το πρόγραμμα θα πρέπει να υπολογίζει και να εμφανίζει τα ρέστα που πρέπει να επιστρέψει
χρησιμοποιώντας κέρματα με αξία 2€, 1€, 0.50€, 0.20€, 0.10€ , 0.05€ και 0.01€. Ο αλγόριθμος πρέπει να
λειτουργεί με τέτοιο τρόπο ώστε τα ρέστα να δίνονται με τον μικρότερο δυνατό αριθμό κερμάτων.

#include <stdio.h>

int main()
{
    int tickets;
    float money,ticket_price;
    ticket_price=0.75;
    scanf("%d %f",&tickets,&money);
    if ((tickets>=1 && tickets<=5) && (money>=0.75 && money<=100))
    {
        float change,price;
        int changex;
        price=tickets*ticket_price;
        change=money-price;
        changex=change*100;
        if (money>price)
        {
            int x1,change1;
            x1=changex%200;
            change1=changex-200*x1;
            int x2,change2;
            x2=change1%100;
            change2=change1-100*x2;
            int x3,change3;
            x3=change2%50;
            change3=change2-50*x3;
            int x4,change4;
            x4=change3%20;
            change4=change3-20*x4;
            int x5,change5;
            x5=change4%10;
            change5=change4-10*x5;
            int x6,change6;
            x6=change5%5;
            change5=change5-5*x6;
            int x7,change7;
            x7=change5%1;
            change6=change5-1*x7;
            printf("%d%dcoins",x1,changex);
        }
        
       
    }
    else
    {
        printf("Wrong input");
    }
  return 0;
}

 

Παιδια βοηθεια για αυτη την ασκηση? Εχω καει τελειως την δουλευω ωρες και δεν μπορω να την λυσω

Δημοσ. (επεξεργασμένο)

Το πρόγραμμα σου είναι γενικά σωστό εκτός από χ1 = change/200 ypoloipo = change%200 ή αυτό που κάνεις με την αφαίρεση

Κοίτα όμως τι σου ζητάει ως έξοδο στο τέλος. Εγώ καταλαβαίνω "ρεστα 13,79 analisi 6 2€ 1 1€ 150c 1 20c klp"

Μετά κοίτα αν χρειάζεσαι όλες αυτές τις μεταβλητές που χρησιμοποιείς ή μπορείς να επαναλαμβάνεις κάποιες. Το υπόλοιπο πχ σε λεπτά που το ονομάζεις changex μπορεί να είναι πάντα η ίδια μεταβλητή και όχι change1, change2 ...

 

Επεξ/σία από k33theod
  • Λύση
Δημοσ. (επεξεργασμένο)

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

int main()
{
    int tickets,change;
    float ticket_price =75;
    float money,price;
    int x200,x100,x50,x20,x10,x5,x1;
    scanf("%d %f",&tickets,&money);
    price=tickets*ticket_price;
    if (tickets<1 || tickets>5 || price>(money*100) || money>100 || money<0.75)
    {
        printf("Wrong input");
    }
    else
    {
        change=round((money*100)-price);
        x200=change/200;
        change=change%200;
        x100=change/100;
        change=change%100;
        x50=change/50;
        change=change%50;
        x20=change/20;
        change=change%20;
        x10=change/10;
        change=change%10;
        x5=change/5;
        change=change%5;
        x1=change/1;
        change=change%1;
        if(x200>0)
        {
            printf("%d * 2 euros\n",x200);
        }
        if(x100>0)
        {
            printf("%d * 1 euros\n",x100);
        }
        if(x50>0)
        {
            printf("%d * 50 cents\n",x50);
        }
        if(x20>0)
        {
            printf("%d * 20 cents\n",x20);
        }
        if(x10>0)
        {
            printf("%d * 10 cents\n",x10);
        }
        if(x5>0)
        {
            printf("%d * 5 cents\n",x5);
        }
        if(x1>0)
        {
            printf("%d * 1 cents\n",x1);
        }
    }
  return 0;
}

 

Επεξ/σία από Figantu
Δημοσ.

Να προσθέσω δύο πραγματάκια στην άσκηση:

- Θα μπορούσαν τα ρέστα να μπουν σε ένα πίνακα, πχ coins = [200,100,50,20,10,5,1]  και με κάποιες for, while κλπ να γινόταν η δουλειά με λιγότερες γραμμές.

- Ο άπληστος αλγόριθμος, δε βρίσκει πάντα τη βέλτιστη λύση. Το ότι τη βρίσκει εδώ, οφείλεται στα νομίσματα που βοηθούν στη λειτουργία. Παράδειγμα, αν τα διαθέσιμα νομίσματα ήταν τα {25,20,10,5} και θέλαμε να επιστρέψουμε 40 λεπτά ρέστα, τότε ο αλγόριθμος θα έδινε 25-10-5 ενώ το βέλτιστο θα ήταν 20-20.

  • Like 2

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...