C++百钱买百鸡实例纠正
答案:2 悬赏:10 手机版
解决时间 2021-01-08 07:05
- 提问者网友:你给我的爱
- 2021-01-07 10:54
C++百钱买百鸡实例纠正
最佳答案
- 五星知识达人网友:七十二街
- 2021-01-07 12:15
程序中的判断出问题了,第二和第三个循环里的d-aaa和d-aaa-bbb都有可能是负数,这个没有考虑到,代码应该改为:
30 //定义一个循环,如果母鸡小鸡相加的钱要大于剩下的钱就执行if语句
31 for (int j = 1; j < 10000; j++)
32 {
33 printf("d-aaa = %d", d - aaa);
34 if ((b*j + c*j >= d - aaa) && (d-aaa)>0)
35 {
36 bb = j; //获取母鸡的数量
37 bbb = b*j; //获取母鸡的钱
38 break; //跳出
39 }else{
40 bb = 0;
41 bbb = 0;
42 }
43 }
44 //定义一个循环,如果母鸡小鸡相加的钱要大于剩下的钱就执行if语句
45 for (int k = 1; k < 10000; k++)
46 {
47 printf("d-aaa - bbb= %d", d - aaa - bbb);
48 if ((c*k >= d - aaa - bbb) && (d - aaa - bbb) > 0)
49 {
50 cc = k; //获取小鸡的数量
51 break;
52 }else{
53 cc = 0;
54 }
55 }追问感谢你的回答,但我想问的是如何保证输入数据不会出错,现在我写的代码是只能由大到小输入三个数字,否则就出错,我想实现的三个数字,随便哪个大哪个小都能计算追答这个题你当初的构思就存在问题的,第一个for循环中,if (a*i + b*i + c*i >= d)这一句就有不合理的地方,为什么三个单价都要和“i”相乘?类似的问题还有好多,如果想避免你说的错误,那就是把框架重新构思一下,看看怎么设计更加严密。追问在这里,i我把它当成数量,只要这三个单价*数量的值是大于d的,就停止循环,并把这个数量保存。
我的意思是,公鸡母鸡小鸡的单价是随意的,小鸡的单价可能是最高的,也可能是中间,但是我这个程序只能识别公鸡>母鸡>小鸡的单价去计算,只要我输入的值不是公鸡>母鸡>小鸡,运算就会失败,我想更正,但不知道怎么更正追答我这里有一个比较笨的方法可以解决这个问题,就是你在计算之前,先去对用户输入的三个单价进行从大到小排序,然后计算时,先去执行最大的,再去执行中间的,然后算出最小的。而且,现在的程序还有一个问题:
44 //定义一个循环,如果母鸡小鸡相加的钱要大于剩下的钱就执行if语句
45 for (k = 1; k < 10000; k++)
46 {
47 //if ((c*k >= d - aaa - bbb) && (d - aaa - bbb) > 0)//此处c*k不能大于钱数
48 if ((c*k >= d - aaa - bbb) && (d - aaa - bbb) > 0)
49 {
50 cc = k - 1;//应该去掉一只 //获取小鸡的数量
51 break;
52 }
53 else if(c*k == d - aaa - bbb){
54 cc = k;
55 }
56 else{
57 cc = 0;
58 }
59 }
60 printf("记着了骚年,你能买 %d 只公鸡,%d 只母鸡,%d小鸡*_*
", aa, bb, cc);
61 }
30 //定义一个循环,如果母鸡小鸡相加的钱要大于剩下的钱就执行if语句
31 for (int j = 1; j < 10000; j++)
32 {
33 printf("d-aaa = %d", d - aaa);
34 if ((b*j + c*j >= d - aaa) && (d-aaa)>0)
35 {
36 bb = j; //获取母鸡的数量
37 bbb = b*j; //获取母鸡的钱
38 break; //跳出
39 }else{
40 bb = 0;
41 bbb = 0;
42 }
43 }
44 //定义一个循环,如果母鸡小鸡相加的钱要大于剩下的钱就执行if语句
45 for (int k = 1; k < 10000; k++)
46 {
47 printf("d-aaa - bbb= %d", d - aaa - bbb);
48 if ((c*k >= d - aaa - bbb) && (d - aaa - bbb) > 0)
49 {
50 cc = k; //获取小鸡的数量
51 break;
52 }else{
53 cc = 0;
54 }
55 }追问感谢你的回答,但我想问的是如何保证输入数据不会出错,现在我写的代码是只能由大到小输入三个数字,否则就出错,我想实现的三个数字,随便哪个大哪个小都能计算追答这个题你当初的构思就存在问题的,第一个for循环中,if (a*i + b*i + c*i >= d)这一句就有不合理的地方,为什么三个单价都要和“i”相乘?类似的问题还有好多,如果想避免你说的错误,那就是把框架重新构思一下,看看怎么设计更加严密。追问在这里,i我把它当成数量,只要这三个单价*数量的值是大于d的,就停止循环,并把这个数量保存。
我的意思是,公鸡母鸡小鸡的单价是随意的,小鸡的单价可能是最高的,也可能是中间,但是我这个程序只能识别公鸡>母鸡>小鸡的单价去计算,只要我输入的值不是公鸡>母鸡>小鸡,运算就会失败,我想更正,但不知道怎么更正追答我这里有一个比较笨的方法可以解决这个问题,就是你在计算之前,先去对用户输入的三个单价进行从大到小排序,然后计算时,先去执行最大的,再去执行中间的,然后算出最小的。而且,现在的程序还有一个问题:
44 //定义一个循环,如果母鸡小鸡相加的钱要大于剩下的钱就执行if语句
45 for (k = 1; k < 10000; k++)
46 {
47 //if ((c*k >= d - aaa - bbb) && (d - aaa - bbb) > 0)//此处c*k不能大于钱数
48 if ((c*k >= d - aaa - bbb) && (d - aaa - bbb) > 0)
49 {
50 cc = k - 1;//应该去掉一只 //获取小鸡的数量
51 break;
52 }
53 else if(c*k == d - aaa - bbb){
54 cc = k;
55 }
56 else{
57 cc = 0;
58 }
59 }
60 printf("记着了骚年,你能买 %d 只公鸡,%d 只母鸡,%d小鸡*_*
", aa, bb, cc);
61 }
全部回答
- 1楼网友:胯下狙击手
- 2021-01-07 13:11
该代码实现的是公鸡数目>=母鸡数目>=小鸡数目,而不是楼主说的那样,这个和输入没关系追问感谢你的回答,这就是我想要更正的,我不会怎么去更正,现在实现的公鸡的数目必须是最大,母鸡次之,小鸡最少才能运气正确,我想要更正,公鸡母鸡小鸡,随意哪个数大哪个数小都没问题追答公鸡单价少也不会运行出错吧,只能说输出结果不是你要的。
如果去掉数目递减限制,就是一个不定方程,解很多,你要给限定条件才行的,其实我不太明白你意思追问我的意思是,公鸡母鸡小鸡的单价是随意的,小鸡的单价可能是最高的,也可能是中间,但是我这个程序只能识别公鸡>母鸡>小鸡的单价去计算,只要我输入的值不是公鸡>母鸡>小鸡,运算就会失败,我想更正,但不知道怎么更正
如果去掉数目递减限制,就是一个不定方程,解很多,你要给限定条件才行的,其实我不太明白你意思追问我的意思是,公鸡母鸡小鸡的单价是随意的,小鸡的单价可能是最高的,也可能是中间,但是我这个程序只能识别公鸡>母鸡>小鸡的单价去计算,只要我输入的值不是公鸡>母鸡>小鸡,运算就会失败,我想更正,但不知道怎么更正
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯