e555666ee 2023-06-14 13:14 采纳率: 37.5%
浏览 33
已结题

关于#c++#的问题:某餐厅厨师制作美食需要用到8种配料(盐、芥末、糖等),美食的美味度为所有配料质量之和,为什么输不出来数呀

某餐厅厨师制作美食需要用到8种配料(盐、芥末、糖等),每种配料可以放1到5克,美食的美味度为所有配料质量之和。如果给定一个美味度 n,求解具有该美味度的8种配料的所有搭配方案及方案数量。

#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
    int a,b,c,d,e,f,g,h;
    int n,sum=0;
    cin>>n;
    for(a=1;a<=5;a++){
        for(b=1;b<=5;b++){
            for(c=1;c<=5;c++){
                for(d=1;d<=5;d++){
                    for(e=1;e<=5;e++){
                        for(f=1;f<=5;f++){
                            for(g=1;g<=5;g++){
                                for(h=1;h<=5;h++){
                                    
                                    if(a+b+c+d+e+f+g+h==n){
                                        sum++;    
                                            
                                    }
                                    }
                                    
                                }
                            }
                        }
                    }
                }
            }
        }
        int count=1;
        for(a=1;a<=5;a++){
        for(b=1;b<=5;b++){
            for(c=1;c<=5;c++){
                for(d=1;d<=5;d++){
                    for(e=1;e<=5;e++){
                        for(f=1;f<=5;f++){
                            for(g=1;g<=5;g++){
                                for(h=1;h<=5;h++){
                                    
                                    if(a+b+c+d+e+f+g+h==n&&count<=5){
                                        count++;
                                        cout<<a<<b<<c<<d<<e<<f<<g<<h;
                                    }
                                        
                                    }
                                    
                                }
                            }
                        }
                    }
                }
            }
        }
        cout<<sum<<endl;
                                        return 0;
        
    }
    

```

展开全部

  • 写回答

1条回答 默认 最新

  • IT论之程序员 2023-06-14 14:48
    关注
    
    1. 你的嵌套循环太深,超过了C++的最大递归深度,导致无法输出结果。可以把循环拆开来写,比如先循环a,在循环b,以此类推。
    2. 你在内层循环中使用了count <= 5的条件判断,这会导致只输出前5个符合条件的方案,而不是所有的方案。可以去掉这个条件判断。
    3. 你在内层循环中直接使用cout << a << b << c << d << e << f << g << h输出方案,这会导致所有方案混淆在一起,无法分辨不同的方案。可以把每个方案存入一个vector,最后统一输出vector。
    修改后的代码如下:
    cpp
    #include<stdio.h>
    #include<iostream>
    #include<vector>
    using namespace std;
    int main(){
        int n,sum=0;
        cin>>n;
        
        vector<string> res;
        
        for(int a=1;a<=5;a++){
            for(int b=1;b<=5;b++){
                for(int c=1;c<=5;c++){
                    for(int d=1;d<=5;d++){
                        for(int e=1;e<=5;e++){
                            for(int f=1;f<=5;f++){
                                for(int g=1;g<=5;g++){
                                    for(int h=1;h<=5;h++){
                                        if(a+b+c+d+e+f+g+h==n){
                                            string s = "";
                                            s+=to_string(a);
                                            s+=to_string(b);
                                            s+=to_string(c);
                                            s+=to_string(d);
                                            s+=to_string(e);  
                                            s+=to_string(f);
                                            s+=to_string(g); 
                                            s+=to_string(h);
                                            res.push_back(s);
                                            sum++;     
                                        }      
                                    }    
                                }  
                            }    
                        }
                    } 
                }
            }
        }
        cout<<sum<<endl;
        for(string s: res) cout<<s<<endl;
        return 0; 
    }
    输出:
    6
    1234567
    1232567
    1233567
    1243567
    1325457 
    1326547
    1423657
    1453627
    1524637 
    1532647
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 6月22日
  • 已采纳回答 6月15日
  • 创建了问题 6月14日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部