第五届蓝桥杯试题及题解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liujie2232692543/article/details/79939865

一.第一题

二项式的系数规律,我国数学家很早就发现了。
如【图1.png】,我国南宋数学家杨辉1261年所著的《详解九章算法》一书里就出现了。
其排列规律:
1
1    1
1    2    1
1    3    3    1
1    4    6    4    1
1    5    10   10   5    1
1    6    15   20   15   6    1
1    7    21   35   35   21   7    1


如下的程序,用来建立N行的杨辉三角形。请填写划线部分缺少的代码。


注意:只填写划线部分的代码,不要填写任何多余的内容。

#define N 8
int main()
{
	int a[N][N];
	int i,j;
	
	for(i=0; i<N; i++){
		a[i][0] = 1;
		a[i][i] = 1;
	}
	
	for(i=1; i<N; i++){
		for(j=1; j<i; j++) ____a[i][j]=a[i-1][j-1]+a[i-1][j];_______;
	}
	
	for(i=0; i<N; i++){
		for(j=0; j<=i; j++)	printf("%-5d", a[i][j]);
		printf("\n");
	}
	
	return 0;
}

第一题就是一道杨辉三角的题目公式,随便一推就ok了。


二.第二题



1/1 + 1/2 + 1/3 + 1/4 + ... 在数学上称为调和级数。
它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。
但是,它发散的很慢:

前1项和达到 1.0
前4项和才超过 2.0
前83项的和才超过 5.0

那么,请你计算一下,要加多少项,才能使得和达到或超过 15.0 呢?
请填写这个整数。

注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。

本人代码:

#include <stdio.h>
//1673859
int main()
{
	float sum = 0;
	for(int i=1;i<=10000000;i++)
	{
		sum += (float)1/i;
	//	printf("%f\n",sum);
		if(sum>=15)
		{
			printf("%f\n",sum);
			printf("%d\n",i);		
			return 0;
		} 
	}

	return 0;	
}

答案为:1673859.  最终得出的i的值就是答案。


三.第三题



有如下的加法算式。其中每个汉字代表一个数字。
(如果存在对齐问题,可参见【图1.png】)


               年
             大年
           过大年
         能过大年
       怎能过大年
     我怎能过大年
+  让我怎能过大年
------------------
   能能能能能能能


请填写“让我怎能过大年” 所代表的整数。
所有数字连在一起,中间不要空格。例如:"3125697"。当然,这个不是正确的答案。


注意:只填写一个整数,不要填写任何多余的内容。

我的代码:

#include <stdio.h>
//1572836
int main()
{
	
	for(int i=1;i<=9;i++)
	{
		for(int j=0;j<=9;j++)
		{
			for(int k=0;k<=9;k++)
			{
				for(int h=0;h<=9;h++)
				{
					for(int g=0;g<=9;g++)
					{
						for(int o=0;o<=9;o++)
						{
							for(int u=0;u<=9;u++)
							{								
								if(u*1*7+o*10*6+g*100*5+h*1000*4+k*10000*3+j*100000*2+i*1000000 == h*1000000+h*100000+h*10000+h*1000+h*100+h*10+h)
								{
									printf("%d %d %d %d %d %d %d\n",i,j,k,h,g,o,u);
									//return 0;
								}
							}
						}
					}
				} 
			}
		}
	} 
	return 0;	
}

所以答案为1572836,暴力就可以得出来的


第四题

1193是个素数,对它循环移位后发现:
1931,9311,3119也都是素数,这样特征的数叫:循环素数。
你能找出具有这样特征的5位数的循环素数吗?
当然,这样的数字可能有很多,请写出其中最大的一个。
注意:答案是个5位数,不要填写任何多余的内容。




第五题



把一个整数的每个数位都平方后求和,又得到一个整数,我们称这个整数为:位平方和。
对新得到的整数仍然可以继续这一运算过程。
比如,给定整数为4,则一系列的运算结果为:

16,37,58,89,....

本题的要求是,已知一个整数x,求第n步的运算结果。
数据格式要求:
输入,两个整数x n,中间以空格分开。表示求x的第n步位平方和。其中,x,n都大于0,且小于100000。
输出,一个整数,表示所求结果。

例如,
输入:
4 3
则程序应该输出:
58

再例如,
输入:
1314 10
则程序应该输出:
20

资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。


我的代码:

#include <stdio.h>
int a[100000];
int s,n,h=0;

int check(int x)
{
	int y=0,sum=0;
	int aa;
	while(x > 0)
	{
		aa=x%10;
		a[y++] = aa;
		x=x/10;
	}
	for(int i=0;i<y;i++)
	{
		sum+=(a[i]*a[i]);
	}
	return sum;
}
int main()
{
	scanf("%d %d",&s,&n);
	h=s;
	for(int i=1;i<=n;i++)
	{
		h = check(h);
		if(i==n)
		{
			printf("%d\n",h);
			return 0;
		}
	}
	return 0;	
}

第六题

形如:1/a 的分数称为单位分数。

可以把1分解为若干个互不相同的单位分数之和。
例如:
1 = 1/2 + 1/3 + 1/9 + 1/18
1 = 1/2 + 1/3 + 1/10 + 1/15
1 = 1/3 + 1/5 + 1/7 + 1/9 + 1/11 + 1/15 + 1/35 + 1/45 + 1/231
等等,类似这样的分解无穷无尽。

我们增加一个约束条件:最大的分母必须不超过30
请你求出分解为n项时的所有不同分解法。
数据格式要求:

输入一个整数n,表示要分解为n项(n<12)
输出分解后的单位分数项,中间用一个空格分开。
每种分解法占用一行,行间的顺序按照分母从小到大排序。

例如,
输入:
4
程序应该输出:
1/2 1/3 1/8 1/24
1/2 1/3 1/9 1/18
1/2 1/3 1/10 1/15
1/2 1/4 1/5 1/20
1/2 1/4 1/6 1/12

再例如,
输入:
5
程序应该输出:
1/2 1/3 1/12 1/21 1/28
1/2 1/4 1/6 1/21 1/28
1/2 1/4 1/7 1/14 1/28
1/2 1/4 1/8 1/12 1/24
1/2 1/4 1/9 1/12 1/18
1/2 1/4 1/10 1/12 1/15
1/2 1/5 1/6 1/12 1/20
1/3 1/4 1/5 1/6 1/20

资源约定:
峰值内存消耗 < 256M
CPU消耗  < 2000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。




第七题

你一定听说过“数独”游戏。
如【图1.png】,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。

数独的答案都是唯一的,所以,多个解也称为无解。

本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。
本题的要求就是输入数独题目,程序输出数独的唯一解。我们保证所有已知数据的格式都是合法的,并且题目有唯一的解。

格式要求,输入9行,每行9个字符,0代表未知,其它数字为已知。
输出9行,每行9个数字表示数独的解。

例如:
输入(即图中题目):
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700

程序应该输出:
145327698
839654127
672918543
496185372
218473956
753296481
367542819
984761235
521839764

再例如,输入:
800000000
003600000
070090200
050007000
000045700
000100030
001000068
008500010
090000400

程序应该输出:
812753649
943682175
675491283
154237896
369845721
287169534
521974368
438526917
796318452

资源约定:
峰值内存消耗 < 256M
CPU消耗  < 2000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。




我的代码:



还有几道题没有完善,稍后会更新的。










猜你喜欢

转载自blog.csdn.net/liujie2232692543/article/details/79939865