Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Semrush - keyword research tool

Turn ChatGPT, Claude, Gemini, And CoPilot Into Your Personal Assistant, Business Coach, Content Creator, And More

AFFILIATE MARKETING Your all-in-one performance engine Manage affiliates, creators, and customer referrals in one unified platform—turning every partnership into measurable growth
Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

42,641 questions

55,376 answers

573 users

How to divide a given amount into bills (banknotes) and coins in C

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>

/*
 * Function: divide_amount
 * -----------------------
 *  Given an amount and an array of bills/coins,
 *  prints how many of each denomination are needed.
 *
 *  Uses a greedy algorithm: always take the largest
 *  possible denomination first. This is optimal for
 *  canonical currency systems (like most real-world ones).
 */
void divide_amount(int amount, const int bills_coins[], int size) {
    printf("Dividing amount: %d\n\n", amount);

    for (int i = 0; i < size; i++) {
        int denom = bills_coins[i];

        /* Number of this denomination needed */
        int count = amount / denom;

        if (count > 0) {
            printf("%4d-unit: %d\n", denom, count);
            amount %= denom;   /* Reduce remaining amount */
        }
    }

    /* If amount is not zero here, something is wrong */
    if (amount > 0) {
        printf("\nWarning: leftover amount = %d (should be 0)\n", amount);
    }
}

int main(void) {
    int bills_coins[9] = {500, 100, 200, 50, 20, 10, 5, 2, 1};

    /* Sort denominations descending for greedy correctness */
    /* Use qsort from stdlib */
    int size = sizeof(bills_coins) / sizeof(bills_coins[0]);

    /* Comparison function for qsort */
    int cmp_desc(const void *a, const void *b) {
        int x = *(const int *)a;
        int y = *(const int *)b;
        return y - x;  /* descending order */
    }

    qsort(bills_coins, size, sizeof(int), cmp_desc);

    int amount = 9749;

    divide_amount(amount, bills_coins, size);

    return 0;
} 



/*
run:

Dividing amount: 9749

 500-unit: 19
 200-unit: 1
  20-unit: 2
   5-unit: 1
   2-unit: 2

*/

 



answered Jan 8, 2022 by avibootz
edited Jul 26 by avibootz
...