2015-06-21 95 views
1

让我通过说我仍然对C++非常陌生并希望尽可能简单。我在数学上也很糟糕。找不到C++中两个项目之间的差异

大多数情况下,我正在查看是否有人能够帮助我的代码,因此它总是会给出正确的结果。除了在一种情况下,我主要是通过它来做我想做的事情。

我的代码试图找出有多少热狗weiners软件包以及某人购买了多少热狗包。然后它会告诉用户他们可以制作多少热狗,以及他们会有多少剩菜或小面包。假设一个包weiners包含12和包子的包中包含8,这就是我来了这么远:

#include <iostream> 
#include <cmath> 

using namespace std; 

void hotdog(int a, int b){  //a = weiner packages, b = bun packages 
    int weiners = 12 * a; 
    int buns = 8 * b; 
    int total = (weiners + buns) - (weiners - buns); 
    int leftOverWeiners = total % weiners; 
    int leftOverBuns = total % buns; 
    int totalHotDogs = total/2; 

    cout << "You can make " << totalHotDogs << " hotdogs!" << endl; 

    if (leftOverWeiners > 0){ 
     cout << "You have " << leftOverWeiners << " weiners left over though." << endl; 
    }else if (leftOverBuns > 0){ 
     cout << "You have " << leftOverBuns << " buns left over though." << endl; 
    } 
} 

int main(){ 
    int a; 
    int b; 

    cout << "Let's see how many hotdogs you can make!" << endl; 
    cout << "How many weiner packages did you purchase?: "; 
    cin >> a; 
    cout << "How many bun packages did you purchase?: "; 
    cin >> b; 

    hotdog(a, b); 

    return 0; 
} 

有了这个,我总能得到正确的答案,如果包子到weiners比例是相同的,或者如果面包比面包更多。

由于我设置了总数和/或leftOverBns(第9,11行)的方式,因此我将永远无法得到有多少剩余小包的正确答案。我知道,如果不是修改我当前的代码的方法,我必须有一个更简单的方法来做到这一点,但我很难过。

我知道我留下了几乎零符号,所以如果你想要一些请让我知道!

+2

不是int'total =(weiners + buns) - (weiners - buns);'与'int total = 2 * buns'一样?你在那做什么? –

+0

@ShripathiKamath 我一直在弄乱那段代码一段时间,我猜。本来这只是: 'INT总和= weiners +包子;' 所以,是的,它是等价的: 'INT总= 2 *包子;' – Robble

+1

在我看来,是什么在这里失踪的事实你受到两项物品中较小的一项的限制。即类似'int number_of_hotdogs_i_can_make = std :: min(weiners,buns)'。 –

回答

0
#include <iostream> 

void hotdog(int weinerspackages, int bunspackages){ 
    const int weinersPerPackage = 12; 
    const int bunsPerPackage = 8; 
    const int totalweiners = weinerspackages * weinersPerPackage; 
    const int totalbuns = bunspackages * bunsPerPackage; 
    int leftoverweiners = 0; 
    int leftoverbuns = 0; 
    int amountOfHotdogs = 0; 

    if(totalweiners > totalbuns){ 
     leftoverweiners = totalweiners - totalbuns; 
     amountOfHotdogs = totalbuns; 
     leftoverbuns = 0; 
    } 
    else if(totalbuns > totalweiners){ 
     leftoverbuns = totalbuns - totalweiners; 
     amountOfHotdogs = totalweiners; 
     leftoverweiners = 0; 
    } 
    else{ 
     amountOfHotdogs = totalweiners; 
     leftoverweiners = 0; 
     leftoverbuns = 0; 
    } 

    std::cout << "You can make: " << amountOfHotdogs << " Hotdogs" << std::endl; 
    std::cout << "Leftover Weiners: " << leftoverweiners << " || Leftover Buns: " << leftoverbuns << std::endl; 
} 

int main(){ 
    int PackagesW = 8; 
    int PackagesB = 12; 

    hotdog(PackagesW, PackagesB); 

    system("pause"); 
    return 0; 
} 

注:可以用更少的变量,要做到这一点,我声明的变量,这个量,使之更容易了解的数字表示。

假设它只需要其中一个制作热狗,您可以找到哪些配料是最少的,而且您可以制作的热狗数量将受该配料数量的限制,这就是为什么amountOfHotdogs取小一的值。如果两者的数量相等,则amountOfHotdogs可以占用两者的数量。

只有含量较大的配料才会有剩菜,因此leftoverweiners = totalweiners - totalbuns;totalweiners > totalbuns反之亦然。

+0

这真的很有帮助,谢谢! – Robble

2

你让它太复杂了。试试这个:

if(weiners > buns) 
{ 
    cout << "You can make " << buns << " hotdogs!" << endl; 
    cout << "with " << weiners-buns << " weiners left over" << endl; 
    return; 
} 
cout << "You can make " << weiners << " hotdogs!" << endl; 
if(buns > weiners) 
{ 
    cout << "with " << buns-weiners << " buns left over" << endl; 
} 

{包子,weiners}中较小的热狗的数量和IF-THEN块确定功能是否会报告剩下的包子或weiners。

+1

缺少'else'? –

+0

哈哈哈,看起来很简单。我最初尝试了类似的东西,但我想当它不适合我的时候,我改变了我的方法。我必须记得有时会继续以同样的方式尝试。 – Robble