2013年蓝桥杯校内选拔赛C语言B组
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 【输出格式】 若干行,每行包含一个满足要求的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 提交时,注意选择所期望的编译器类型。 [cpp]view plaincopyprint? 1.#include 2.int a[6]; 3.int temp=0; 4.int hui(int n) 5.{ 6.int i, j, k; 7. i = 0; 8.while (n) 9. { 10. a[i++] = n%10; 11. n = n/10; 12. } 13. j = 0; 14. k = i-1; 15.while (j < k) 16. { 17.if (a[j++] != a[k--]) 18.return 0; 19. } 20.for (i=0; i<6;i++) 21. temp+=a[i]; 22.return 1; 23.} 24.int main() 25.{ 26.int val; 27.int i,j; 28. scanf("%d", &val); 29.if(val<2||val>54) 30. { 31. printf("-1\n"); 32.return 0; 33. } 34.for (i=10000; i<1000000; i++) 35. { 36. temp=0; 37.if (hui(i)&&temp == val) 38. { 39. printf("%d\n", i); 40. } 41. } 42.} ps:当时大脑短路啊,竟然没敢暴力一遍,卡住了 5.标题:数字游戏 栋栋正在和同学们玩一个数字游戏。 游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数字1。接下来,坐在栋栋左手边的同学要说下一个数字2。再下面的一个同学要从上一个同学说的数字往下数两个数说出来,也就是说4。下一个同学要往下数三个数,说7。依次类推。 为了使数字不至于太大,栋栋和同学们约定,当在心中数到k 时,下一个数字重新从1开始数。例如,当k=13时,栋栋和同学们报出的前几个数依次为: 1, 2, 4, 7, 11, 3, 9, 3, 11, 7。 游戏进行了一会儿,栋栋想知道,到目前为止,他所有说出的数字的总和是多少。 【输入格式】