wcy的初赛模拟题(1)纠错集

一、单项选择

1、以下与电子邮件无关的网络协议是

      A、SMTP        B、POP3        C、MIME        D、FTP

答案:D,FTP是文件传输协议

错因:不知道

2、布尔型变量占用(  )个比特位

A、1        B、2        C、4        D、8

答案:D,1布尔变量=1字节=8bit

错因:2*4=4他真的我哭死

3、由4个节点构成的形态不同的二叉树有( )种

A、16        B、14        C、20        D、10

答案:B

解析:令f[i]表示i个节点的二叉树个数,在f[0]=1,f[i]=\sum_{j=0}^{i-1} f[i]f[i-1-j],f[4]=14

4、一颗6节点二叉树的中序遍历为ABDGECF,先序遍历为DBACEF后序遍历为(  )

A、DGBEFAC        B、ABGEFCD        C、GBEACFD        D、ABCDEFG

答案:B

解析:由先序排序可得D为根,所以后序必须是D为最后一个,排除A、D

           由中序的G在右子树中,所以后序不可能以G为开头,排除C

            先序:DLR(根左右)中序:LDR(左根右)后序:LRD(左右根)

错因:自己的问题,把先、中、后序的顺序记反了

小补充:时间复杂度:冒泡排序:O(n*n)

二、阅读程序

1、

#includ<iostream>
using namespace std;
int a,b,c;
int main()
{
	cin>>a>>b>>c;
	a=b-a;
	b=b-a;
	a=b+a;
	c=b-a;
	cout<<a<<" "<<b<<" "<<c;
	return 0;
}

1、若输入123456789012 2 3,将输出2 123456789012 123456789010(  )

A、正确        B、错误 

答案:B

解析:123456789012超出了int的范围

错因:无脑狂爱int,不熟悉int的范围

2、将头文件<iostream>可以改成<cstdio>( )

A、正确        B、错误

答案:B

解析:cstdio不能cin,cout

错因:无脑狂爱万能头,其他一窍不通

2、

#include<bits/stdc++.h>
using namespace std;
#define maxn 105
int a[maxn][maxn],b[maxn][maxn];
int f(int m,int n)
{
	if(m<=0||n<=0) 
	{
		return 0;
	}
	a[0][0]=b[0][0];
	for(int i=1;i<n;i++) a[0][i]=a[0][i-1]+b[0][1];
	for(int i=1;i<m;i++) a[i][0]=a[i-1][0]+b[i][0];
	for(int i=1;i<m;i++)
	{
		for(int j=1;j<n;j++)
		{
			a[i][j]=min(a[i-1][j],a[i][j-1]+b[i][j]);
		}
	}
	return a[m-1][n-1];
} 
int main()
{
	int m,n;
	cin>>m>>n;
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			cin>>b[i][j];
		}
	}
	cout<<f(m,n);
	return 0;
}

分析:本代码是用DP求(0,0)——>(m-,n-1)的最短路

1、输入数据为:

        4 4

        1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

       则输出的结果为:

        A、28        B、16        C、136        D、46

答案:D

解析:经过的数字为1、2、3、4、8、12、16

错因:计算错误、对DP不是很熟

2、我们将上述算法成为( )

A、DFS        B、BFS        C、DP        D、贪心

答案:C

解析:DP是以左下或右下探索,BFS是从一点向四周,DFS是直接搜,贪心及更不可能了

错因:对于DP不是很熟

三、完善程序

1、 

#include<bits/stdc++.h>
using namespace std;
#define N 1001 
int n,m,x,y;
vector<int>G[N];//vector:流动线行数组,不可查位置,可以省掉大部分空间
stack<int>q;//栈,先头后尾
int cnt[N],tpc;
bool pd()
{
	for(int i=1;i<=N;i++) if(______) q.push(i);
	while(!q.empty())
	{
		int u=q.top();
		q.pop();
		pc++;
		for(int i-0;i<G[u].size();i++)
		{
			int v=G[u][i];o
			________
			if(!cnt[v])_______;
		}
	}
	if(__________) return 1;
	else return 0;
} 
int main()
{
	cin>>n>>m;
	while(m--)
	{
		cin>>x>>y;
		G[x].push_back(y);
		______________;		
	}	
	if(pd()) cout<<"存在有向环"; 
	else  cout<<"不存在有向环";
	return 0;
}

分析:(拓扑排序)输入一张n节点m条边的有向图,用该图的一个拓扑排序的方式判断该图是否存在有向环,若有拓扑排序输出排序,没有输出没有,否则则输出有

1、2处应该填( )

 A、q.push(v);        B、q.pop();        C、cnt[u]--;        D、cnt[v]--; 

答案:D      

解析:删除点u,将v的入读为-1

2、3处应该填( )

A、q.pop()        B、q.push(v);        C、tpc--;        D、tpc++

答案:B

解析:v的入度变为零时入队

3、5处应该填( )

A、cnt[x]++;                B、G[y].push(x);        C、cnt[y]++;        D、G[y].push_back(x);

答案:C

解析:单向边,将y的入度为1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值