(这篇博客是小菜鸡写来自己复习的时候看看的,记录下笔试的过程,大佬们可以来教教我正常的解题思路,误喷)
考试题型:不定项 5 道,填空 5 道,编程 2 道
不定项,填空考点:
结构体的sizeof,函数的值传递方式,二叉树的前中后序遍历(给出二叉树的前序,中序遍历,求二叉树的后序遍历)
其中记得的一道题的程序核运行结果:
编程题
1.大概意思是给出几棵树的高度,你每次可以让一棵树不生长,其他树生长1个单位,问经过多少次后树的高度全都相等?
我的思路是每次都让最高的一棵树不生长,其他的树生长(样例过了,提交没过段错误)
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
long long int aa[100000];
long int n;
scanf("%lld",&n);
long long int bigtree = 0;
int num = 0;
long long int temp = 0;
for(long long int i = 0;i < n; i++)
{
scanf("%lld",&aa[i]);
if(aa[i] > aa[bigtree])
{
bigtree = i;
}
}
while(1)
{
for(long long int i = 0;i < n ; i++)
{
if(i!=bigtree)
aa[i]++;
}
num++;
temp = 0;
for(long long int i = 0;i < n; i++)
{
if(aa[i] == aa[bigtree])
temp++;
if(aa[i] > aa[bigtree])
bigtree = i;
}
if(temp == n)
break;
}
printf("%d\n",num);
}
2.给出一个字符串,给出n个(a,b)序列,找出字符串里的所有a更换成b(暴力打的没过,时间超限)
#include <stdio.h>
#include <string.h>
int main()
{
char s[1000001];
scanf("%s",s);
//cout<<s.length()<<endl;
long long int n;
scanf("%lld",&n);
for(long long int i = 0 ; i < n ; i++)
{
int a,b;
scanf("%d%d",&a,&b);
for(long long int j = 0 ; j < strlen(s) ; j++)
{
int c = s[j]-48;
if(c==a)
{
s[j] = b+48;
}
}
}
printf("%s\n",s);
}