ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2014 年蓝桥杯 C 语言 B 组省赛第 1 题: 啤酒和饮料

2019-03-22 14:49:30  阅读:514  来源: 互联网

标签:11 int 浮点数 蓝桥 饮料 2014 include 啤酒 组省赛


题目

标题:啤酒和饮料

啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。

我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。

注意:答案是一个整数。请通过浏览器提交答案。

不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。

题目分析

这里使用使用循环暴力破解即可, 根据啤酒和饮料的价格以及一共花费了八十多块钱可以大致估计, 啤酒的数量不会超过 50 罐, 饮料的价格不会超过 60 罐, 由于有啤酒和饮料两个, 因此用两个嵌套的 for 循环对其进行遍历即可.

下面先来看一个有问题的程序.

下面这个程序在逻辑上是符合的, 但是无法运行出结果:

#include <iostream>
using namespace std;
int main(){
	for (int i=1; i<=50; i++){
		for (int j=1; j<=60; j++){
			if((i<j)&&(i*2.3+j*1.9==82.3)){
				cout<<i<<" "<<j<<endl;
			}
		}
	}
	return 0;
}

无法出结果的原因是, 如果参与运算的有浮点数, 那个其运算结果是不能用于比较是否相等的 ("=="两边不能是浮点数), 因为浮点数的精度不同可能导致两个本来相同的浮点数不相等.

正确的比较方法是计算两个数的差值, 如果差值小于一个极小的数就表明这两个数字是相等的, 正确的程序如下:

#include<iostream>
#include<cmath>
using namespace std;
int main(){
	for (int i=1; i<=50; i++){
		for (int j=1; j<=60; j++){
			if((i<j)&&abs((i*2.3+j*1.9) - 82.3)<0.0000000000001){
				//abs()库函数用于求绝对值
				cout<<i<<" "<<j<<endl;
			}
		}
	}
	return 0;
}

运行结果:

11 30

当然, 本题也可以通过将题目中给出的数据都扩大 10 倍, 将浮点类型转换成 int 类型之后再计算, 程序如下:

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
	for(int pj=1;pj<60;pj++){
		for(int yl=1;yl<60;yl++){
			if(pj<yl&&pj*23+yl*19==823){
				cout<<"啤酒:"<<pj<<endl;
				cout<<"饮料:"<<yl<<endl;
			}
		}
	}
	return 0;
}

运行结果:

啤酒:11
饮料:30

其中 11 是啤酒的罐数且满足啤酒的罐数小于饮料的罐数 (可以在得出结果后使用 PC 中的计算器验证一下).
本题正确答案:
11

标签:11,int,浮点数,蓝桥,饮料,2014,include,啤酒,组省赛
来源: https://blog.csdn.net/wy_bk/article/details/88740247

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有