2011-02-13 32 views
0

给定一个数量为ml和3个包装大小(20ml,200ml和1000ml),我想计算每个包装需要多少个才能完成总量。在C中改变计算器的良好实现

E.g.

Amount =ml 
1000ml = 3 packs 
200ml = 1 pack 
20ml = 1 pack (always round up to nearest quantity) 

这是非常简单,只是想换一个计算器,我期待为正确办法做到这一点。

这是我尝试

public class PackSizeCalculator 
{ 
    private const int LargePackSize = 1000; 
    private const int MediumPackSize = 200; 
    private const int SmallPackSize = 20; 

    public int LargePacks {get; set;} 
    public int MediumPacks {get; set;} 
    public int SmallPacks {get; set;} 

    public PackSizeCalculator(int amount) 
    { 
     int remainder = amount; 

     while(remainder > 0) { 
      if(remainder >= LargePackSize) 
      { 
       LargePacks = remainder/LargePackSize; 
       remainder = remainder % LargePackSize; 
      } 
      else if(remainder >= MediumPackSize) 
      { 
       MediumPacks = remainder/MediumPackSize; 
       remainder = remainder % MediumPackSize; 
      } 
      else if(remainder > SmallPackSize) 
      { 
       if(remainder % SmallPackSize == 0) 
       { 
        SmallPacks = (remainder/SmallPackSize); 
       } 
       else { 
        SmallPacks = (remainder/SmallPackSize) + 1; 
       } 
       remainder = 0; 
      } 
      else { 
       SmallPacks = 1; 
       remainder = 0; 
      } 
     } 
    } 
} 

这是一个很好的方式去了解它,或者你会推荐什么不同?

+0

请发表您到目前为止写的代码。 – 2011-02-13 07:25:55

+1

没有正确的方法来做到这一点。你的“问题”听起来更像是“请为我做”。这是大脑外包......你正在寻找一种算法,而不是真正的技术代码/编程问题。这可能可能是一种跛脚懒惰的表现,因为你至少应该提出你想到的预反思/算法替代方案。 – 2011-02-13 07:29:38

回答

1

事情是这样的:

const int LARGE_PACK = 1000; 
const int MEDIUM_PACK = 200; 
const int SMALL_PACK = 20; 

int largePacks = (int)(Amount/LARGE_PACK); 
int mediumPacks = (int)((Amount % LARGE_PACK)/MEDIUM_PACK); 
int smallPacks = (int)ceil(((float)((Amount % LARGE_PACK) % MEDIUM_PACK)/SMALL_PACK)); 
0

您可以创建这样的函数:

struct Change 
{ 
    public int Large; 
    public int Medium; 
    public int Small; 
} 
private Change CalculateChange(int TotalAmount) 
{ 
    Change result; 
    result.Large = TotalAmount >= 1000 ? TotalAmount/1000 : 0; 
    result.Medium = TotalAmount % 1000 >= 200 ? (TotalAmount % 1000)/200 : 0; 
    result.Small = (TotalAmount % 1000) % 200 >= 20 ? ((TotalAmount % 1000) % 200)/20 : 0; 
    return result; 
} 

在最后,你将有你的更改结构类型的结果。