今天刚参加的校内选拔赛,崩溃了。。。。。。。
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!