2014年蓝桥杯本科B组(部分题解)及个人总

啤酒和饮料

题目描述:

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

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

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

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

思路的话就从1~50遍历,如果(啤酒x2.3)+(饮料x1.9)=82.3就输出
注意:啤酒<饮料

也就是:

for(i=1;i<50;i++)
	{
		for(j=1;j<50;j++)
		{
if(2.3*i+1.9*j==82.3)
{
			printf("%d\n",i);
			break;
			}	

但是啥也没输出
之后我将判断改了一下

if(2.3*i+1.9*j>82.250000&&2.3*i+1.9*j<82.350000&&i<j)

就得到了正确结果。完美哈哈哈

代码:

#include<stdio.h>
int main()
{
	int i,j;
	for(i=1;i<50;i++)
	{
		for(j=1;j<50;j++)
		{
			if(2.3*i+1.9*j>82.250000&&2.3*i+1.9*j<82.350000&&i<j)
			{
			printf("%d\n",i);
			break;
			}		
		}
	}
		return 0;	
} 

答案:11

切面条

题目描述:

一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?

答案是个整数,请通过浏览器提交答案。不要填写任何多余的内容。

思路:对折对折,肯定实在原来的基础上进行变化,仔细观察题目后就能发现其实后面这一次的等于前面一次的乘以2再减去1

代码

#include<stdio.h>
int main()
{
	int a[15]={0},i;
	a[0]=2,a[1]=3,a[2]=5;
	for(i=2;i<=10;i++)
	a[i]=a[i-1]*2-1;
	printf("%d",a[10]);
	return 0; 
}

答案:1025

李白打酒

题目描述:

话说大诗人李白,一生好饮。幸好他从不开车。

一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:

无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 

请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。

思路:要用到深搜,但我也还不太懂,,,,,,

代码:

#include<stdio.h>
int sum=0;
void dfs(int a,int b,int c)
{
	if(a==0&&b==0&&c==1)
	sum++;
	if(a>0)
	dfs(a-1,b,c*2);
	if(b>0)
	dfs(a,b-1,c-1); 
}
int main()
{
	dfs(5,9,2);
	printf("%d",sum);
	return 0;
}

答案:14

史丰收

速算(可跳过)

题目描述:

史丰收速算法的革命性贡献是:从高位算起,预测进位。不需要九九表,彻底颠覆了传统手算!

速算的核心基础是:1位数乘以多位数的乘法。

其中,乘以7是最复杂的,就以它为例。

因为,1/7 是个循环小数:0.142857...,如果多位数超过 142857...,就要进1

同理,2/7, 3/7, ... 6/7 也都是类似的循环小数,多位数超过 n/7,就要进n

下面的程序模拟了史丰收速算法中乘以7的运算过程。

乘以 7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位。

乘以 7 的进位规律是:
满 142857... 进1,
满 285714... 进2,
满 428571... 进3,
满 571428... 进4,
满 714285... 进5,
满 857142... 进6

请分析程序流程,填写划线部分缺少的代码。

思路:这么一大串还有个锤子思路,经过我仔细的阅读,发现原来,原来啥也看不懂 原来关键是题目的代码
下面看一下题目填空代码

while(r==0){
			p += 6;
			strncpy(buf,p,6);
			r = strcmp(level[i], buf);
			if(r<0) return i+1;
			_________________________;  //填空
		}

分析一下发现有r=0,r<0这两种情况,那么就是r>0的情况没考虑,而且前面的if有返回值i+1,那么填空部分可能是返回(i+?)
所以我大胆蒙一个答案 猜测 :return i;对答案发现少了一个判断,太可惜了

答案:

if(r>0)
return i;

奇怪的分式

题目描述:

上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:

1/4 乘以 8/5 

小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)

老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!

对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢?

请写出所有不同算式的个数(包括题中举例的)。

显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。

但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!

注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。

思路:其实这个题目和13年的马虎的算式类似,可以通过暴力枚举实现,把a(第一个数的分子),b(第一个数的分母),c(第二个数的分子),d(第二个数的分母)可能的情况都枚举一次,如果满足ac/bd=(ax10+c)/(bx10+d),可能的情况就加一。

也就是:

if(((a*c*1.0)/(b*d*1.0))==(((a*10+c)*1.0)/((b*10+d)*1.0)))
								sum++;

注意:两个数分子分母各不相同。

代码:

#include<stdio.h>
int main()
{
	int a,b,c,d,sum=0;
	float q,w,e,r;
	for(a=1;a<=9;a++)
	{
		for(b=1;b<=9;b++)
		{
			if(b!=a)
			{
				for(c=1;c<=9;c++)
				{
						for(d=1;d<=9;d++)
						{
							if(d!=c)
							{
								if(((a*c*1.0)/(b*d*1.0))==(((a*10+c)*1.0)/((b*10+d)*1.0)))
								sum++;
							}	
						}	
				}		
			} 
		}
	}
	printf("%d",sum);
	return 0;
} 

答案:14

相比13年的题,感觉难度有增大,尤其是编程题目,同时也考察了例如深搜还未学习的东西,还是得抓紧向前学,向我玩失踪大哥学习!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值