蓝桥杯2017第八届C语言B组省赛习题题解——习题C.承压计算

每日刷题(二十一)

蓝桥杯第八届C语言B组省赛习题

习题C:承压计算

在这里插入图片描述
在这里插入图片描述
这个题目还是很有意思的,这里有两点需要考虑,
第一,因为题目说每块原料的重量都平均落在下方的两个金属块上,而看到这个三角形结构,我们可以很快想到杨辉三角,也就是说我们可以把这个题当做二维数组来处理,按照题目意思得出一个公式a[i + 1][j] = a[i][j] / 2,a[i + 1][j + 1] = a[i][j] / 2.那么顺着这样的思路往下走,塔尖的7会分别给左右下面两个金属块3.5单位的重量,一层一层往下,3.5又会被细分为很小,而所得到的数字是远远超出C所能表示的精度的,那么我们就得换一种思维,我们先把它放大,统一把所有的值都乘以2^29次方,因为一共有29层,要让第三十层的电子秤接收重量,就得一直除以,做29次,一开始我写的代码是这样的

#include<stdio.h>

int main()
{
	double a[30][30] = {0.0};
	int i, j;
	for(i = 0; i < 29; i++)
		for(j = 0; j <= i; j++)
			scanf("%lf",&a[i][j]);
	printf("Now\n");
	for(i = 0; i < 30; i++)
		for(j = 0; j <= i; j++)
			printf("%lf ",a[i][j]);
	
	for(i = 0; i < 29; i++)
		for(j = 0; j <= i; j++)
		{
			a[i + 1][j] += a[i][j] / 2;
			a[i + 1][j + 1] += a[i][j] / 2; 
		}
	printf("\n");

	for(i = 0; i < 30; i++)
		printf("%lf\n",a[29][i]);
		
	return 0;
}

部分运行结果如下
在这里插入图片描述
可见最小的数是3点多,可是题目说读数最小的电子秤的示数为:2086458231,可见我之前考虑的是对的,我们需要把数字放大一下
我把他们总体都放大了2^29。
第二个要考虑的是输出结果的格式,这里我觉得数字会很大,所以我选择用long long定义了数组,输出以lld输出的
完整C代码如下

#include<stdio.h>

int main()
{
	int i, j;
	long long min = 3333333333ULL, max = 0ULL;
	long long a[30][30] = {0};
	long long k = 1;
	for(i = 0; i < 29; i++)
	{
		k *= 2;
	}
	printf("%lld\n",k);
	for(i = 0; i < 29; i++)
		for(j = 0; j <= i; j++)
		{
			scanf("%lld",&a[i][j]);
			a[i][j] *= k;
		}
			
	for(i = 0; i < 29; i++)
	{
		for(j = 0; j <= i; j++)
			printf("%lld ", a[i][j]);
		printf("\n");
	}
	
//	for(i = 0; i < 29; i++)
//		printf("%d\n",a[i][i]);
	printf("Now\n");
	
	for(i = 0; i < 29; i++)
	{
		for(j = 0; j <= i; j++)
		{
			a[i + 1][j] += a[i][j] / 2.0;
			a[i + 1][j + 1] += a[i][j] / 2.0;
		}
	}
	for(j = 0; j < 30; j++)
	{
		if(a[29][j] < min)
			min = a[29][j];
		if(a[29][j] > max)
			max = a[29][j];
	}
	printf("min : %lld max : %lld\n",min, max);

	return 0;
}

部分运行结果如下
在这里插入图片描述
在这里插入图片描述
最小值对应题目所给的2086458231,那么最大值便是72665192664
直接提交72665192664即可,不要输出这么多数据,我这里是带大家分析

还有一个值得注意的地方,如果你的编译器出现了这个信息在这里插入图片描述
这可能表明你的编译器版本不够新,面对long long这种类型的常量,需要在后面加上ULL,如图
在这里插入图片描述

这是目前为止最保姆级的教程,如果喜欢我的文章,请记得三连哦,点赞关注转发,欢迎各位志同道合的IT友人在评论区讨论交流,感谢您的支持,下期更精彩!!!

发布了40 篇原创文章 · 获赞 7 · 访问量 3114

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/104569245