2010-04-12 58 views
3

我试图让这个程序将用户定义的美元数量分解成最少的账单。我不认为我的for循环正在运行,因为如果我把一个writeline线放在它们中,当它运行时它不会显示出来。在c中分解货币#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication13 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      Console.Write("Enter the amount of money: $"); 
      int totalAmount = Convert.ToInt32(Console.ReadLine()); 
      calculateNumberOfBills(totalAmount); 
     } 

     static void calculateNumberOfBills(int totalAmount) 
     { 

      int[] denominations = { 20, 10, 5, 1 }; 
      int[] numberOfBills = new int[4]; 
      for (numberOfBills[0] = 0; totalAmount < 20; numberOfBills[0]++) 
      { 
       totalAmount = totalAmount - 20; 
      } 
      for (numberOfBills[1] = 0; totalAmount < 10; numberOfBills[1]++) 
      { 
       totalAmount = totalAmount - 10; 
      } 
      for (numberOfBills[2] = 0; totalAmount < 5; numberOfBills[2]++) 
      { 
       totalAmount = totalAmount - 5; 
      } 
      for (numberOfBills[3] = 0; totalAmount <= 0; numberOfBills[3]++) 
      { 
       totalAmount = totalAmount - 1; 
      } 
      Console.WriteLine("Number of twenties" + numberOfBills[0]); 
      Console.WriteLine("Number of tens" + numberOfBills[1]); 
      Console.WriteLine("Number of fives" + numberOfBills[2]); 
      Console.WriteLine("Number of ones" + numberOfBills[3]); 
     } 
    } 
} 
+0

什么是您使用您的测试的总金额? – 2010-04-12 06:51:39

回答

2

看看这个:

for (numberOfBills[0] = 0; totalAmount >= 20; numberOfBills[0]++) 
    { 
     totalAmount = totalAmount - 20; 
    } 
    for (numberOfBills[1] = 0; totalAmount >= 10; numberOfBills[1]++) 
    { 
     totalAmount = totalAmount - 10; 
    } 
    for (numberOfBills[2] = 0; totalAmount >= 5; numberOfBills[2]++) 
    { 
     totalAmount = totalAmount - 5; 
    } 
    for (numberOfBills[3] = 0; totalAmount > 0; numberOfBills[3]++) 
    { 
     totalAmount = totalAmount - 1; 
    } 
+0

确定工作,但我不得不改变最后一个循环到totalAmount >= 1;谢谢。你能告诉我为什么它不以另一种方式工作吗? – Covertpyro 2010-04-12 06:56:24

+0

哇,现在想起来似乎很明显,猜测这就是我在编程时得到的,当我很累的时候。 – Covertpyro 2010-04-12 07:02:30

0

在你的“for”循环,你有逆条件=>总金额< 20意味着它执行循环,而总金额为 20 - 这与你想要的相反。

将其更改为

for(...;totalAmount > 20; ...) 
2

这是一个家庭作业的问题,对不对?

 for (numberOfBills[0] = 0; totalAmount < 20; numberOfBills[0]++) 

使其

 for (numberOfBills[0] = 0; totalAmount >= 20; numberOfBills[0]++) 

,然后再试一次:) 中心件是在环路应该运行的条件。

1

对不起,在这一点上这是“不是一个真正的问题”,应该最有可能被标记为家庭作业。

您的“小于”比较应该更改为“大于”比较,您很乐意使用您的解决方案。现在发生的事情是一个整数溢出,最终导致你的第一个for循环,这是循环无限循环,直到然后打破。

有更简单的方法来解决您的问题,尝试用一个单一的循环和模运算符)。

+0

+1对于模运算符。它的使用并不经常。 :-) – Patrick 2010-04-12 07:28:12

0

试试这个,有点不太代码

int amt = 73; 

    Dictionary<int, int> dic = new Dictionary<int, int>() {{20,0},{10,0},{5,0},{1,0}}; 
    int[] keys =new int[dic.Count]; 
    dic.Keys.CopyTo(keys, 0); 

    foreach (int i in keys) 
    {    
     if (amt >= i) 
     { 
      dic[i] = amt/i; 
      amt = amt % i; 
     } 
    }