In my previous blog– Making a Change in Greedy, I explained you how we can deal with a Greedy algorithm by making a change example. Today, we will see its program in C#, where I had taken a set of {100, 50, 20, 10, 5 and 1} and our aim is to include a method to input the purchase amount and the amount given by the customer as well as a method to output the amount of change and breakdown by denomination. Apply Greedy algorithm at the cashier side; i.e give fewer numbers of coins to satisfy the Greedy algorithm.

Algorithm

MAKE-CHANGE (n)
C ← {100, 20, 10, 5, 1} // constant.
Sol ← {}; // set that will hold the solution set.
Sum ← 0 sum of item in solution set
WHILE sum not = n
x = largest item in set C such that sum + x ≤ n
IF no such item THEN
RETURN "No Solution"
S ← S {value of x}
sum ← sum + x
RETURN S


Making a Change Problem in C#

Step 1

Open your Visual Studio. By pressing Ctrl +Shift + N, you will get your “New Project” Window.



Step 2

After pressing OK, you will get into your coding part, where you will see three files in Solution Explorer [Properties, References, Program.cs], in which Program.cs file is your main file, where you embed all your making a change program code.


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication1 {
  6. class Program {
  7. static int note100, return100, note50, return50, note20, return20, note10, return10,
  8. note5, return5, note1, return1, coin1, returncoins;
  9. static int billamount = 0, recvamount = 0, differ = 0, change = 0;
  10. private static void calcNumberNotes() {
  11. int differ = 0;
  12. differ = recvamount - billamount;
  13. return100 = (int)(Math.Floor(differ / 100 m));
  14. if (return100 > note100) {
  15. differ = differ - (note100 * 100);
  16. return100 = note100;
  17. } else {
  18. differ = differ - (return100 * 100);
  19. }
  20. return50 = (int)(Math.Floor(differ / 50 m));
  21. if (return50 > note50) {
  22. differ = differ - (note50 * 50);
  23. return50 = note50;
  24. } else {
  25. differ = differ - (return50 * 50);
  26. }
  27. return20 = (int)(Math.Floor(differ / 20 m));
  28. if (return20 > note20) {
  29. differ = differ - (note20 * 20);
  30. return20 = note20;
  31. } else {
  32. differ = differ - (return20 * 20);
  33. }
  34. return10 = (int)(Math.Floor(differ / 10 m));
  35. if (return10 > note10) {
  36. differ = differ - (note10 * 10);
  37. return10 = note10;
  38. } else {
  39. differ = differ - (return10 * 10);
  40. }
  41. return5 = (int)(Math.Floor(differ / 5 m));
  42. if (return5 > note5) {
  43. differ = differ - (note5 * 5);
  44. return5 = note5;
  45. } else {
  46. differ = differ - (return5 * 5);
  47. }
  48. return1 = (int)(Math.Floor(differ / 1 m));
  49. if (return1 > note1) {
  50. differ = differ - (note1 * 1);
  51. return1 = note1;
  52. } else {
  53. differ = differ - (return1 * 1);
  54. }
  55. if (differ <= coin1) {
  56. returncoins = differ;
  57. } else {
  58. returncoins = -1;
  59. }
  60. }
  61. static void Main(string[] args) {
  62. note100 = note50 = note20 = note10 = note5 = note1 = coin1 = 0;
  63. Console.WriteLine("Enter your 100rs Note available");
  64. note100 = Convert.ToInt32(Console.ReadLine());
  65. Console.WriteLine("\n");
  66. Console.WriteLine("Enter your 50rs Note available");
  67. note50 = Convert.ToInt32(Console.ReadLine());
  68. Console.WriteLine("\n");
  69. Console.WriteLine("Enter your 20rs Note available");
  70. note20 = Convert.ToInt32(Console.ReadLine());
  71. Console.WriteLine("\n");
  72. Console.WriteLine("Enter your 10rs Note available");
  73. note10 = Convert.ToInt32(Console.ReadLine());
  74. Console.WriteLine("\n");
  75. Console.WriteLine("Enter your 5rs Note available");
  76. note5 = Convert.ToInt32(Console.ReadLine());
  77. Console.WriteLine("\n");
  78. Console.WriteLine("Enter your 1rs Note available");
  79. note1 = Convert.ToInt32(Console.ReadLine());
  80. Console.WriteLine("\n");
  81. Console.WriteLine("Enter your 1rs coint available");
  82. coin1 = Convert.ToInt32(Console.ReadLine());
  83. Console.WriteLine("\n");
  84. Console.WriteLine("Enter the Bill Amount :");
  85. billamount = Convert.ToInt32(Console.ReadLine());
  86. Console.WriteLine("\n");
  87. Console.WriteLine("Enter the Recieved Amount :");
  88. recvamount = Convert.ToInt32(Console.ReadLine());
  89. Console.WriteLine("\n");
  90. Console.WriteLine("The Bill Amount is:- \t" + billamount);
  91. Console.WriteLine("\n");
  92. Console.WriteLine("The Recieved Amount is:- \t" + recvamount);
  93. Console.WriteLine("\n");
  94. calcNumberNotes();
  95. if (returncoins < 0) {
  96. Console.WriteLine("Changes are not Available");
  97. } else {
  98. Console.WriteLine("\n");
  99. change = recvamount - billamount;
  100. Console.WriteLine("Changes Available Are:- \t" + change);
  101. }
  102. Console.WriteLine("\n");
  103. Console.WriteLine("Notes of 100:\t" + return100);
  104. Console.WriteLine("Notes of 50:\t" + return50);
  105. Console.WriteLine("Notes of 20:\t" + return20);
  106. Console.WriteLine("Notes of 10:\t" + return10);
  107. Console.WriteLine("Notes of 5:\t" + return5);
  108. Console.WriteLine("Notes of 1:\t" + return1);
  109. Console.WriteLine("Coins:\t" + returncoins);
  110. Console.ReadKey();
  111. }
  112. }
  113. }
Output Window



Hope, you like it. Thank you for reading, Have a good day.