2012年第三届蓝桥杯决赛真题补充练习

Part 1:结果填空+代码填空

1. 2012C/C++高职组T1【结果填空】(满分12分)

    素数就是不能再进行等分的整数。比如:7,11。而9不是素数,因为它可以平分为3等份。一般认为最小的素数是2,接着是3,5,...

    请问,第100002(十万零二)个素数是多少?

    请注意:“2” 是第一素数,“3” 是第二个素数,依此类推。

    不需要提交源代码,只要写出准确的结果即可!

    答案写在:“解答.txt”中,不要写在这里。

【分析】循环+素数判定

#include <stdio.h>
#include <math.h>
int is_prime(int n)        //判素数 
{
	int i,flag=1;
	for(i=2;i<=sqrt(n);i++)
	{
		if(n%i==0)
		{
			flag=0;
			break;
		}
	}
	return flag;
}
int main()
{
	int i=2,num=1;         //i记录当前数,num记录第num个素数 
	while(num<=100002)
	{
		if(is_prime(i))
			printf("No.%d:%d\n",num++,i);
		i++;
	}
	return 0;
}

【答案】1299743

2. 2012C/C++高职组T2 【代码填空】(满分14分)

    当数据量较小的时候,使用基本排序方案并不会显著影响程序性能。

    选择排序是十分常用的基本排序方案之一。它的每一趟排序都从一个序列中选择最小的那个元素,加入到逐步扩展的已排序序列。初始的时候,已排序序列为第一个元素,待排序序列为剩下的所有元素,即从第二个元素到结尾。

    下面的代码演示了对int数组中的n个元素进行基本选择排序。请仔细阅读并分析代码,填写空白处的代码,使得程序的逻辑合理,结果正确。

void sel_sort(int* x, int n)
{
 int k, i, m, t;
 for(k=0; k<n-1; k++)  // 多趟排序
 {
  m = _____________;  // 填空1
  for(i=k+1; i<n; i++)
  {
   if(x[i] < x[m]) _________________;  // 填空2
  }

  t = x[k];
  x[k] = x[m];
  x[m] = t;
 }
}

void display(int* x, int n)
{
 for(int i=0; i<n; i++)  printf("%d ", x[i]);
 printf("\n");
}

void main()
{
 int N = 10;
 int a[] = {5, 12, 35, 28, 19, 22, 36, 17, 4, 11};
 display(a, N);
 sel_sort(a, N);
 display(a, N);
}


【注意】
    只填写缺少的部分,不要抄写已有的代码。
    所填写代码不超过1条语句(句中不会含有分号)
    所填代码长度不超过256个字符。
    答案写在“解答.txt”中,不要写在这里!

【分析】选择排序(注意基本排序算法的灵活应用)

#include <stdio.h>
 
void sel_sort(int* x, int n)
{
	int k, i, m, t;
	for(k=0; k<n-1; k++)  // 多趟排序
	{
		m = k;  // 填空1
		for(i=k+1; i<n; i++)
		{
			if(x[i] < x[m]) m=i;  // 填空2
		}

		t = x[k];
		x[k] = x[m];
		x[m] = t;
	}
}

void display(int* x, int n)
{
	for(int i=0; i<n; i++)  printf("%d ", x[i]);
	printf("\n");
}

int main()
{
	int N = 10;
	int a[] = {5, 12, 35, 28, 19, 22, 36, 17, 4, 11};
	//int a[] ={1,7,3,5,9,4,8,11,16,14};
	display(a, N);
	sel_sort(a, N);
	display(a, N);
	return 0;
}

【答案】填空1:k    填空2:m=i

3. 2012Java本科组T1【结果填空】(满分9分)

    复杂现象背后的推动力,可能是极其简单的原理。科学的目标之一就是发现纷繁复杂的自然现象背后的简单法则。爱因斯坦的相对论是这方面的典范例证。

    很早的时候,生物学家观察某区域某种昆虫的数量(称为虫口数)之逐年变化规律,就十分迷惑:有的时候是逐渐增多达到一个平衡值。有的时候在两个数字间周期跳动。有的时候则进入一片混乱,类似随机数字一样变化(称为混沌现象)。

    慢慢地,人们从数学中更清晰地观察到了这一现象,并因此开创了:符号动力学、非线性动力学等研究领域。

    一个著名的虫口数目简化模型如下:

    x' = x * (1 - x) * r

    这里,x  x' r 都是浮点数。
 
    其中,x 表示当年的虫口数,x' 表示下一年的虫口数。它们的取值范围在 0 与 1 之间,实际上表示的是:虫口的总数占环境所能支持的最大数量的比率。

    r 是常数(环境参数),r的取值范围在 [0,4]。

    令人惊讶的是:这个简单的迭代公式有着不同寻常的神秘性质!

    一般来说,多次迭代后,虫口数的稳定模式与x的初始值无关,而与 r 有关!

    例如:无论x初始值是多少,当 r = 2.5 的时候,x 多次迭代后会趋向于 0.6。

    而当 r = 3.2 的时候,x 的值会趋向于在 0.799 与 0.513 之间周期性摆动。

    那么,r = 3.62 的时候,你观察到有什么周期现象发生吗?


    不需要提交源代码,只要写出你的结论即可!

    答案写在:“解答.txt”中,不要写在这里。 

【分析】迭代,可调用系统函数实现逐步输出结果的效果。

#include <stdio.h>
#include <windows.h>
int main()
{
	double x,xx,r;    //当年的虫口数,下一年的虫口数,常数 
	x=0.5;            //x置初值0.5 
	scanf("%lf",&r);
	while(1)
	{
		xx=x*(1-x)*r;
		x=xx;
		printf("%lf\n",xx);
		Sleep(1000);
	}
	return 0;
}

【参考答案】虫口数目函数呈锯齿状变化,虫口数目不存在连续两年增加和连续两年减少的情况。

4. 2012Java高职组T1【结果填空】 (满分11分)

    看这个算式:
 
    ☆☆☆ + ☆☆☆ = ☆☆☆

    如果每个五角星代表 1 ~ 9 的不同的数字。

    这个算式有多少种可能的正确填写方法?

    173 + 286 = 459
    295 + 173 = 468
    173 + 295 = 468
    183 + 492 = 675

    以上都是正确的填写法!

    注意:
    111 + 222 = 333 是错误的填写法!
    因为每个数字必须是不同的!
    也就是说:1~9中的所有数字,每个必须出现且仅出现一次!

    注意:
    不包括数字“0”!

    注意:
    满足加法交换率的式子算两种不同的答案。
    所以答案肯定是个偶数!

    注意:
    只要求计算不同的填法的数目
    不要求列出所有填写法
    更不要求填写源代码!

    答案不要写在这里,请写在“解答.txt”中!

【分析】枚举+全排列

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int cnt=0;
	int n1,n2,n3;
	int a[9]={1,2,3,4,5,6,7,8,9};
	do
	{
		n1=a[0]*100+a[1]*10+a[2];
		n2=a[3]*100+a[4]*10+a[5];
		n3=a[6]*100+a[7]*10+a[8];
		if(n1+n2==n3)
		{
			printf("%d+%d=%d\n",n1,n2,n3);
			cnt++;
		}
	} while(next_permutation(a,a+9));
	printf("count=%d\n",cnt);
	return 0;
}
【答案】336

Part 2:程序设计

1.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值