NameError_7 2023-09-28 18:10 采纳率: 0%
浏览 6

for循环代码中递减对于条件判断的问题

问题是“花5元买了100个纽扣,一个金属纽扣5角,一个玻璃纽扣1角,三个塑料纽扣5分,求每种纽扣分别买了多少?”
于是我用了

#include<iostream>
using namespace std;
int metal, plastic, glass;
int buttons(int x,int y)
{
    int money_p, money_m;
    x *= 10;
    //cout << x << " ";
    plastic = y - y % 6;
    //cout << plastic << " ";
    money_p = plastic / 6;
    //cout << money_p << " ";
    metal = (x - money_p) / 5;
    //cout << metal << " ";
    money_m = metal * 5;
    //cout << money_m << " ";
    glass = x - money_p - money_m;
    //cout << glass << " ";
    for (; plastic + metal + glass != 100; money_p--)
    {
        plastic=money_p*6;
        //cout << plastic << " ";
        metal = (x - money_p) / 5;
        //cout << metal << " ";
        money_m = metal * 5;
        //cout << money_m << " ";
        glass = x - money_p - money_m;
        //cout << glass << " ";
        for (; plastic + metal + glass != 100 && metal >= 0; metal = metal - 1)
        {
            if (money_m + money_p + plastic != x)
            {
                cout << plastic << " ";
                money_m = metal * 5;
                cout << metal << " ";
                glass = x - money_m - money_p;
                cout << glass << " ";
            }
        }
    };
    return 0;
}
int main()
{
    int money, total;
    cout << "请输入金额:";
    cin >> money;
    cout << "请输入纽扣个数:";
    cin >> total;
    buttons(money, total);
    cout << "共买了" << metal << "个金属纽扣," << glass << "个玻璃纽扣," << plastic << "个塑料纽扣。";
    return 0;
}

但实际上代码运行到plastic=90, metal=6, glass=5就会停止循环,输出"共买了5个金属纽扣,5个玻璃纽扣和五个塑料纽扣"的结果

  • 写回答

1条回答 默认 最新

  • 金戈鐡馬 2023-09-28 23:51
    关注

    要解决这个问题,可以使用循环来遍历所有可能的纽扣数量组合,然后判断是否满足购买100个纽扣且花费5元的条件。
    以下是解决方案:

    #include <iostream>
    
    int main() {
        int metalButton = 0;    // 金属纽扣数量
        int glassButton = 0;    // 玻璃纽扣数量
        int plasticButton = 0;  // 塑料纽扣数量
    
        for (metalButton = 0; metalButton <= 100; metalButton++) {
            for (glassButton = 0; glassButton <= 100; glassButton++) {
                for (plasticButton = 0; plasticButton <= 100; plasticButton++) {
                    // 检查是否满足购买100个纽扣且花费5元的条件
                    if (metalButton * 0.5 + glassButton * 0.1 + plasticButton * 0.05 == 5 &&
                        metalButton + glassButton + plasticButton == 100) {
                        // 输出每种纽扣的数量
                        std::cout << "金属纽扣数量:" << metalButton << std::endl;
                        std::cout << "玻璃纽扣数量:" << glassButton << std::endl;
                        std::cout << "塑料纽扣数量:" << plasticButton << std::endl;
                        return 0;
                    }
                }
            }
        }
    
        std::cout << "无解" << std::endl;
        return 0;
    }
    
    

    这里使用了三个嵌套的for循环来遍历所有可能的纽扣数量组合。然后,检查当前组合是否满足购买100个纽扣且花费5元的条件。如果满足条件,输出每种纽扣的数量,并使用return 0语句提前结束程序。如果没有找到满足条件的解,输出"无解"。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 9月28日