# Greedy Algorithm

A **greedy algorithm** is an *algorithmic paradigm* that follows the *problem-solving heuristic* of making the locally optimal choice at each stage with the hope of finding a global optimum. In C language, a greedy algorithm can be implemented using **loops and conditional statements**.

Here’s an example of a greedy algorithm in C language:

```
#include <stdio.h>
#define MAX 100
// Function to find the minimum number of coins required to make a given sum
int minCoins(int coins[], int n, int sum) {
int i, count = 0;
for (i = 0; i < n; i++) {
while (sum >= coins[i]) {
sum -= coins[i];
count++;
}
}
return count;
}
int main() {
int coins[] = {1, 5, 10, 25}; // available coins
int n = sizeof(coins) / sizeof(coins[0]); // number of available coins
int sum = 63; // target sum
int min = minCoins(coins, n, sum); // find the minimum number of coins required
printf("Minimum number of coins required to make %d cents: %d\n", sum, min);
return 0;
}
```

This program uses a **greedy algorithm** to find the minimum number of coins required to make a given sum. The available coins are *1 cent, 5 cents, 10 cents, and 25 cents*. The program starts by choosing the largest available coin that is less than or equal to the target sum and then continues by choosing the largest available coin that is less than or equal to the remaining sum until the sum is zero.

The

function implements the greedy algorithm. It uses a loop to iterate over the available coins, and a nested loop to repeatedly subtract the largest available coin from the sum until the sum is less than the coin. The function counts the number of coins used and returns the result.**minCoins()**

**Greedy algorithms** are efficient and easy to implement, but they may not always produce optimal solutions for every problem. In some cases, a **greedy algorithm** may miss a better solution that requires a different combination of choices. Therefore, it’s important to carefully analyze the problem and determine if a greedy algorithm is appropriate.