c语言编程求找错误!

6个砝码1、2、5、10、15、20gabcdef是它们的个数求能称取得质量的个数... 6个砝码1、2、5、10、15、20g
abcdef是它们的个数
求能称取得质量的个数
展开
 我来答
自我编程
2020-11-04 · 科技优质答主
自我编程
采纳数:1481 获赞数:4279

向TA提问 私信TA
展开全部

按照你的问题:(6种砝码组合,列出所有不同的组合结果)

从编程角度看你的代码,不单纯是错误修改,还有编程思路改进:

一、有5个砝码重量和5个砝码数量,那么重量应定义成数组(写程序要考虑需求的修改,比如其它重量组合),而数量也定义成数组(单独写成abcdef可以,但是数量多了不方便阅读维护程序,而且数组可以循环遍历)。

二、逻辑上,可将组合结果放在一个数组中,每次组合将结果和数组对比,存在就跳过,不存在就保存到数组,最后这个结果数组就是题目要的n种质量。

三、扩展讲,这里重量和数量都是砝码对象的属性,所以实际开发,这种情况把砝码定义成结构体更好,数量和重量都是其属性。(考虑你学习范围,这里暂用数组解决)

四、结果数组可以定义一个非常大的数组(但是输入的数字太大可能会超出范围),也可以用动态数组。
下面是代码(我演示代码所有个数都输入1,这样每种刚好有0和1两种选择,这样刚好就是6位二进制数(对应10进制就是63),和截图一致。打印输出是给你看的,可以注释掉):


#include<stdio.h>

#define N 6//砝码种类的数量,定义常量,方便修改

#define M 1000//组合的最大数量

int main()

{

    int sums[M]={0},len=0,flag,sTemp;//结果数组,按你写法用大数组,但注意不要输入太大数量,否则使用动态数组

    int i,wets[N]={1,2,5,10,15,20},nums[N]={0};

    int a[N],cnt=0,n=0;

    for(i=0,printf("请分别输入%d种砝码数量(1,2,5,10,15,20g):\n",N);i<N;scanf("%d",&nums[i++]));

    for(a[0]=0;a[0]<=nums[0];a[0]++)//按照你的写法,嵌套循环穷举所有组合

        for(a[1]=0;a[1]<=nums[1];a[1]++)//这样写,如需扩展,比如100种砝码,要复制99遍,还要改下标(实际代码太长,所以最好还是用递归函数单独实现,这里不深究)

            for(a[2]=0;a[2]<=nums[2];a[2]++)

                for(a[3]=0;a[3]<=nums[3];a[3]++)

                    for(a[4]=0;a[4]<=nums[4];a[4]++)

                        for(a[5]=0;a[5]<=nums[5];a[5]++)

                        {

                            cnt++;

                            printf("个数的组合%d:%d,%d,%d,%d,%d,%d",n++,a[0],a[1],a[2],a[3],a[4],a[5]);//测试用,打印给你看,可注释掉

                            for(i=0,sTemp=0;i<N;sTemp+=a[i]*wets[i],i++);

                            printf("(总重量%d)\n",sTemp);//测试用,打印给你看,可注释掉

                            for(i=0,flag=0;i<len;i++)// 与结果数组对比

                                if(sums[i]==sTemp)

                                {

                                    flag=1;//发现有重复记录,标识置1

                                    break;

                                }

                            if(flag)cnt--;//用重复,当前组合结果放弃,不记录

                            else

                            {

                                sums[len]=sTemp;//不重复,记录当前组合结果

                                len++;

                            }

                        }

    printf("其中共有%d种不同组合\n",cnt);

    for(i=0,printf("总重量分别为:");i<cnt;printf("%d ",sums[i]),i++);//测试用,打印给你看,可注释掉

    return 0;

}

更多追问追答
追问
哇谢谢大佬🙇🏻‍♀️我先采纳了!但如果方便的话能不能告诉我我写的到底是哪里出错了导致运行不出结果呢?希望还是能在原来的基础上进行修改。大一小白卑微求教
追答
我这代码就是参考你的写法,只不过把同类独立变量改成数组。你对比思考下。实现不行回头把你的原码贴上了,我改天有空给你看看。但最好自己看。读代码是编程的基本要求。
syht2000
高粉答主

2020-11-04 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
1、你指的错误是啥
2、你这代码本来是要计算什么用的。
更多追问追答
追问
你好
一共6种砝码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2020-11-04 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.8亿
展开全部
你粘贴代码来看啊?这个代码要实现什么功能?
追问
我私聊您
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式