2012第三届蓝桥杯 C/C++高职组真题及题解(未完待续)

1. (2')土地测量

    造成高房价的原因有许多,比如土地出让价格。既然地价高,土地的面积必须仔细计算。遗憾的是,有些地块的形状不规则,比如是如图【1.jpg】中所示的五边形。
    一般需要把它划分为多个三角形来计算。
    已知三边求三角形的面积需要用海伦定理,参见【2.jpg】

2012第三届蓝桥杯 C/C++高职组真题及题解(未完待续)_第1张图片         2012第三届蓝桥杯 C/C++高职组真题及题解(未完待续)_第2张图片
    各条边长数据如下:
    AB = 52.1
    BC = 57.2
    CD = 43.5
    DE = 51.9
    EA = 33.4
    EB = 68.2
    EC = 71.9
    根据这些数据求五边形地块的面积。四舍五入到小数后两位。只写结果,不要源代码!
    答案写在“解答.txt”中,不要写在这里!

【分析】使用海伦公式,计算三角形ABE、三角形BCE、三角形CDE的面积之和即可。所求结果即土地面积

#include 
#include 
int main()
{
	double AB = 52.1;
    double BC = 57.2;
    double CD = 43.5;
    double DE = 51.9;
    double EA = 33.4;
    double EB = 68.2;
    double EC = 71.9;
	double s1,s2,s3;
	double a1,a2,a3,sum;
	
	s1=(AB+EB+EA)/2;
	s2=(EB+BC+EC)/2;
	s3=(CD+EC+DE)/2;
	a1=sqrt(s1*(s1-AB)*(s1-EB)*(s1-EA));
	a2=sqrt(s2*(s2-EB)*(s2-BC)*(s2-EC));
	a3=sqrt(s3*(s3-CD)*(s3-EC)*(s3-DE));
	sum=a1+a2+a3;
	printf("%.2lf\n",sum);
	return 0;
}
【答案】3789.86

2. (3')卖鸡蛋

    大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子。她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。
    欧拉随便问:“卖了多少鸡蛋呢?”
    不料一个说:“我们两人自己卖自己的,一共卖了150个鸡蛋,虽然我们卖的鸡蛋有多有少,但刚好得了同样的钱数。你猜猜看!”
    欧拉猜不出。
    另一个补充道:“如果我按她那样的价格卖,可以得到32元;如果她按我的价格卖,可以得到24.5元”。
    欧拉想了想,说出了正确答案。
    我们不是数学家,懒得列出公式来分析。但计算机可以“暴力破解”,就是把所有可能情况都试验一遍,撞上为止!
    请写出每人鸡蛋的数目(顺序不限),用逗号隔开。
    答案写在“解答.txt”中,不要写在这里!    

【分析】循环+枚举

        双层循环,枚举两个人鸡蛋的数目,随时记录对方的单价。注意浮点数大小的比较问题

#include 
#include 
int main()
{
	int i,j;
	double p1,p2;
	for(i=1;i<=150;i++)
	{
		for(j=1;j<=150;j++)
		{
			if(i+j!=150)
				continue;
			p1=24.5/j;
			p2=32.0/i;
			if(fabs(i*p1-j*p2)<1e-8)
				printf("%d,%d\n",i,j);
		}
	}
	return 0;
}
【答案】80 70

3. (5')古堡算式

    福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
    ABCDE * ? = EDCBA
    他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
    华生:“我猜也是!”
    于是,两人沉默了好久,还是没有算出合适的结果来。
    请你利用计算机的优势,找到破解的答案。
    把 ABCDE 所代表的数字写出来。
    答案写在“解答.txt”中,不要写在这里! 

【分析】暴力枚举+去重

        根据数的特点,A ? E的取值范围[1, 9],B C D E的取值范围[0, 9],使用五层循环枚举即可。需要注意的是,A B C D E所代表的数字不能有重复,因此需去重。

#include 
int main()
{
	int a[5];
	int n1,n2,ret;
	for(a[0]=1;a[0]<10;a[0]++)
	{
		for(a[1]=0;a[1]<10;a[1]++)
		{
			if(a[1]==a[0])
				continue;
			for(a[2]=0;a[2]<10;a[2]++)
			{
				if(a[2]==a[1] || a[2]==a[0])
					continue;
				for(a[3]=0;a[3]<10;a[3]++)
				{
					if(a[3]==a[2] || a[3]==a[1] || a[3]==a[0])
						continue;
					for(a[4]=1;a[4]<10;a[4]++)
					{
						if(a[4]==a[3] || a[4]==a[2] || a[4]==a[1] || a[4]==a[0])
							continue;
						n1=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];
						ret=a[4]*10000+a[3]*1000+a[2]*100+a[1]*10+a[0];
						for(n2=1;n2<10;n2++)
						{
							if(n1*n2==ret)
								printf("%d * %d = %d\n",n1,n2,ret);
						}
					}
				}
			}
		}
	}
	return 0;
}
【答案】21978

4. (6')巧排扑克牌

    小明刚上小学,学会了第一个扑克牌“魔术”,到处给人表演。魔术的内容是这样的:
    他手里握着一叠扑克牌:A,2,....J,Q,K 一共13张。他先自己精心设计它们的顺序,然后正面朝下拿着,开始表演。
    只见他先从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是A;然后再从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是2;......如此循环直到手中只有一张牌,翻开放桌子上,刚好是K。
    这时,桌上牌的顺序是:A,2,3,4,5,6,7,8,9,10,J,Q,K
    请你计算一下,小明最开始的时候手里牌的顺序是怎样的。
    把结果写出来,逗号分割,小明“魔术”开始时,最下面的那张牌输出为第一个数据。
    考场不提供扑克牌,你只能用计算机模拟了,撕碎草稿纸模拟扑克属于作弊行为!另外,你有没有把录像倒着放过?很有趣的!回去试试!

【分析】


【答案】

5. 


6. 


7. 


8. 


9. 


10. 

你可能感兴趣的:(历届蓝桥杯真题——省赛)