C语言的啤酒饮料问题
前言
作为一个物联在读生,C语言是我们必学的一科,今天分享的是“啤酒饮料问题”的想法与代码啊。然后有什么不对或者是可以改进的地方,欢迎提出与探讨呀。
一、题目要求
问题描述:啤酒每罐2.3元,饮料每瓶1.9元,小明买了若干饮料喝啤酒,总共花了82.3元,并且他买的啤酒的数量比饮料的少,请问他买了多少罐啤酒和多少瓶饮料。请输出所有可能的方案
二、作答步骤
1.思路
这是一个数学问题:
假设啤酒买x,饮料买y;x<y;两者所用的钱的总和为82.3元;并且已知了二者的单价。
我们可以得到一个二元一次方程:1.9y+2.3x=82.3。
输出xy的值。
我们可以看出来,只要xy中有一个值确定了,那么另一个就也可以得出来了。那么如何先确定其中的一个值就成为了现在的首要问题了。
我们可以先假定全买一种,另一种数量为0。
在这里题目要求啤酒的数量比饮料的少,那么我们可以先假定全买饮料:int l=82.3/ml; //定义全买饮料
此时购买的数量是买饮料的最大值,后面的方案的饮料的数量会比这少:for(int i=l;i>j;i--) //从全买饮料开始输出,但买的啤酒比饮料多时,退出
用一个循环来依次递减饮料的数量;
确定啤酒的数量j=(82.3-ml*i)/mp;
,但是因为我们确定啤酒数量的时候使用的是“商”,有可能会出现存在余数的情况,也就是说,钱没用完
计算出我们应该付的钱float k=ml*i+mp*j; //计算应花的钱
把计算得到的钱和82.3进行对比,确定求得数量是否正确,这里我们计算得出来的结果可能会和82.30有误差,例如得到82.299之类的,所以在这里用k>82.295&&k<82.305
来允许误差的存在。
2.代码演示
代码如下:
#include<stdio.h>
int main()
{
int i=0,j=0; //定义啤酒和饮料数量;
float mp=2.3,ml=1.9; //定义单价
int l=82.3/ml; //定义全买饮料
//printf("%d",l);
for(int i=l;i>j;i--) //从全买饮料开始输出,但买的啤酒比饮料多时,退出
{
j=(82.3-ml*i)/mp;
float k=ml*i+mp*j; //计算应花的钱
//printf("%lf\n",k);
if(k>82.295&&k<82.305)
{
printf("啤酒买了%d瓶\n饮料买了%d瓶\n",j,i);
printf("花费%.2lf元。\n\n",k);
}
}
return 0;
}
完结撒花