赞
踩
作为一个物联在读生,C语言是我们必学的一科,今天分享的是“啤酒饮料问题”的想法与代码啊。然后有什么不对或者是可以改进的地方,欢迎提出与探讨呀。
问题描述:啤酒每罐2.3元,饮料每瓶1.9元,小明买了若干饮料喝啤酒,总共花了82.3元,并且他买的啤酒的数量比饮料的少,请问他买了多少罐啤酒和多少瓶饮料。请输出所有可能的方案
这是一个数学问题:
假设啤酒买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
来允许误差的存在。
代码如下:
#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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。