标题:啤酒和饮料
啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。
我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
注意:答案是一个整数。请通过浏览器提交答案。
不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。
#include<stdio.h>
#include<math.h>
#define N 2.3 //啤酒单价
#define M 1.9 //饮料单价
#define SUM 82.3 //总价
#define ZERO 1e-3 //0的比较
int main(){
int n=0,m=0;
for(n=0;n<=SUM/N;n++){
for(m=0;m<=SUM/M;m++){
if(n>=m) continue; //买的啤酒比饮料的数量少
float temp=n*N+m*M; //计算待总价
if(fabs(SUM-n*N-m*M)<ZERO){ //与总价比较
printf("%d\n",n); //输出结果
// printf("%f\t%d\t%d\n",n*N+m*M,n,m); //测试输出
}
}
}
return 0;
}
本题不难、但是对细节考察的很周密。
对float中0的比较,如果两个相等的数值进行比较时,错误地采用了a==b,则不会出现预计的结果。
因为,存在的精度问题使得,在进行比较的时候,常采用两数值相减之后的绝对值(fabs(a-b))与一个较小值(1e-6)进行比较,只要绝对值小于较小值,则两数值相等。