在C++中查找两个项目之间的差异时出错

Trouble finding differential between two items in C++

本文关键字:之间 项目 出错 两个 C++ 查找      更新时间:2023-10-16

让我在前面说,我对C++还很陌生,希望尽可能简单。我的数学也很差。

大多数情况下,我想看看是否有人能帮助我的代码,这样它总是能给出正确的结果。除了一种情况外,我大部分时间都是想做什么就做什么。

我的代码试图找出某人购买了多少包热狗堰和多少包热狗包。然后它告诉用户他们可以用它做多少热狗,以及他们会有多少剩下的汉堡或小圆面包。假设一包堰包含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;
}

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

由于我设置total和/或leftOverBuns的方式(第9行、第11行),我永远不会得到剩余面包数量的正确答案。我知道,如果不是修改我当前代码的方法,一定有一种更简单的方法可以做到这一点,但我被难住了。

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

你把它搞得太复杂了。试试这个:

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;
}

{buds,weiners}中较小的是热狗的数量,if-then块决定函数是否会报告剩余的buds或weiners。

#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可以取其中任何一个的量。

只有量较大的成分才会有剩菜,因此当totalweiners > totalbuns时为leftoverweiners = totalweiners - totalbuns;,反之亦然。