2013年11月24日 蓝桥杯校内选拔赛c\c++B组——答案+试题

今天刚参加的校内选拔赛,崩溃了。。。。。。。

1.标题:满二叉树

 

    一般情况下,二叉树通过含有指针的数据结构来存储。但对特殊情形,也可以简化存储。

   

    比如满二叉树的情形:除了最后一层的叶子节点外,所有的节点都有完整的左右子节点。我们可以按照树的逐层遍历顺序把节点存在数组中。当然,需要从某个节点的序号计算出它的父亲节点或者两个孩子节点。

   

    下面代码的目标是求某节点的父节点的。请填写划线部分缺少的代码。

  

 

// 返回k号节点的父节点数据

// data: 存储满二叉树的数组

// k: 当前节点的索引号(即数组下标,从0开始)

intget_parent(int* data, int k)

{

       return data[ _______________ ];  //填空位置

}

 

 

 

请严格按照格式,通过浏览器提交答案。

注意:只提交划线部分缺少的内容,不要写其它附加内容,比如:说明性的文字。

注意选择自己使用的编译器类型

 答案: (k-1)/2

题目标题: 堆煤球

 

 

    小明的爷爷很怀旧,冬天来了他还是要自己做煤球。

 

    并且,爷爷把煤球堆放得十分整齐有规律:最上边一层只有1个煤球。第二层4个煤球摆成正方形,再下面9个煤球也是摆成正方形。总之,第 n 层就是边长为 n 的正方形。这样的结构既通风又稳固。

 

    小明数了数,一共有30层,请你帮助计算一下,一共有多少个煤球? ___________

 

 

请通过浏览器提交答案。

注意:只提交数字,不要求解过程或公式。

注意:不要书写其它的内容(比如:说明性的文字)。

 

答案: 9455

3.

题目标题: 大小之差

 

    某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。

    该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。

 

    比如:766431- 134667 = 631764 就是具有这样特征的数字。

   

    你还能找到另一个这样的6位数吗?

   

    请填写它重新排列数位后得到的最大数:________________ 

 

 

请通过浏览器提交答案。

注意:只提交另一个6位数,题中已经给出的这个不要提交。

注意:不要书写其它的内容(比如:说明性的文字)。

答案:  995544或者955554   ps当时没看到恰好包含了组成原6位数同样的数字

4.标题:回文数字

 

    观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。

 

    本题要求你找到一些5位或6位的十进制数字。满足如下要求:

    该数字的各个数位之和等于输入的整数。

 

 

【输入格式】

一个正整数 n (10<n<100), 表示要求满足的数位和。

 

【输出格式】

若干行,每行包含一个满足要求的5位或6位整数。

数字按从小到大的顺序排列。

如果没有满足条件的,输出:-1

 

【样例输入】

44

 

【样例输出】

99899

499994

589985

598895

679976

688886

697796

769967

778877

787787

796697

859958

868868

877778

886688

895598

949949

958859

967769

976679

985589

994499

 

【样例输入2】

60

 

【样例输出2】

-1

 

【资源约定】

    峰值内存消耗 < 64M

    CPU消耗  < 1000ms

 

 

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

 

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

 

注意: main函数需要返回0

注意: 只使用ANSIC/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。

注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

 

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

#include<stdio.h>
int a[6];
int temp=0;
int hui(int n)
{	
	int i, j, k;
	i = 0;
	while (n)
	{
		a[i++] = n%10;
		n = n/10;
	}
	j = 0;
	k = i-1;
	while (j < k)
	{
		if (a[j++] != a[k--])
			return 0;
	}
	for (i=0; i<6;i++)
		temp+=a[i];
	return 1;
}
int main()
{
	int val;
	int i,j;
	scanf("%d", &val);
	if(val<2||val>54)
	{
		printf("-1\n");
		return 0;
	}
	for (i=10000; i<1000000; i++)
	{
		temp=0;
		if (hui(i)&&temp == val)
		{
			printf("%d\n", i);
		}

	}
}

ps:当时大脑短路啊,竟然没敢暴力一遍,卡住了

5.标题:数字游戏

 

    栋栋正在和同学们玩一个数字游戏。

 

    游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数字1。接下来,坐在栋栋左手边的同学要说下一个数字2。再下面的一个同学要从上一个同学说的数字往下数两个数说出来,也就是说4。下一个同学要往下数三个数,说7。依次类推。

 

    为了使数字不至于太大,栋栋和同学们约定,当在心中数到 k 时,下一个数字重新从1开始数。例如,当k=13时,栋栋和同学们报出的前几个数依次为:

    1, 2, 4, 7, 11, 3, 9, 3, 11, 7。

 

    游戏进行了一会儿,栋栋想知道,到目前为止,他所有说出的数字的总和是多少。

 

【输入格式】

    输入的第一行包含三个整数 n,k,T,其中 n 和k 的意义如上面所述,T 表示到目前为止栋栋一共说出的数字个数。

 

【输出格式】

    输出一行,包含一个整数,表示栋栋说出所有数的和。

 

【样例输入】

3 13 3

【样例输出】

17

 

【样例说明】

    栋栋说出的数依次为1, 7, 9,和为17。

 

【数据规模与约定】

    1 < n,k,T < 1,000,000;

 

【资源约定】

    峰值内存消耗 < 64M

    CPU消耗  < 2000ms

 

 

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

 

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

 

注意: main函数需要返回0

注意: 只使用ANSIC/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。

注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

 

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

#include<stdio.h>
int main()
{
	int  a[100000],k,n,t,i,j,sum=0;
	scanf("%d%d%d",&n,&k,&t);
	a[0]=1;
	for (i=1;i<=(t-1)*n+1;i++)
		a[i]=(a[i-1]+i)%k;//当时粗心写13了,写成样例了,下面也是
	for(j=0;j<t;j++)
		sum+=a[n*j];//3
	printf("%d",sum);
	return 0;
}

下面是网上看到没用数组的

# include <iostream>
using namespace std;

int main(void)
{
	int n, k, T;
	int s=0;
	int i, m=1;
	int sum=0;
	scanf("%d %d %d",&n,&k,&T);

	for (i=1; i<=n*T; i++)//n*T表示循环次数
	{
		m=m+(i-1);//当前人的报数
		if (m>k)
			m=m-k;			
		if (i%n==1)//轮到栋栋就sum加 m
			sum = sum+m;
	}
	printf("%d\n",sum);
	return 0;
}


总结:自己第一次参加比赛吧,有的紧张,很是粗心啊,当为明年买经验了。同时也说明了自己对自己要求太松了,加强对自己的要求。come on!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值