美文网首页互联网科技程序员我用 Linux
2014年第二十届全国青少年信息学奥林匹克联赛初赛普及组C++题

2014年第二十届全国青少年信息学奥林匹克联赛初赛普及组C++题

作者: 海天一树X | 来源:发表于2018-08-14 12:16 被阅读44次

题目:
https://wenku.baidu.com/view/05014660de80d4d8d15a4fb1.html?from=search

答案:
https://wenku.baidu.com/view/e72d455887c24028905fc30e.html?from=search

一、选择题

1 B

2 D
1TB = 1024GB = 1024 * 1024MB = 1024 * 1024 * 1024KB = 1024 * 1024 * 1024 * 1024B = 240 B

3 D
这题经常考

4 D
前三个都是输入设备

5 C

6 B
总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。
总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。
在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。

7 A
随机存取存储器(random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存或内存。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。
只读存储器(read only memory),英文简称ROM。ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。计算机中的ROM主要是用来存储一些系统信息,或者启动程序BIOS程序,这些都是非常重要的,只可以读一般不能修改,断电也不会消失。
RAM与ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM(不会自动消失,可以长时间断电保存。
注意:RAM与ROM都是内存,但是通常说的计算机内存指的是RAM。硬盘,光盘,优盘等则外存。

8 A
(1)SMTP: Simple Mail Transfer Protocol, 简单邮件传输协议

(2)UDP: User Data Protocol,用户数据报协议。是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

TCP(Transmission Control Protocol ,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如下图所示)。

1-8.png

大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。
QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

(3)P2P(Peer to Peer)对等计算机或对等网络。
p2p的核心:
P2P的核心是数据存储在客户本地,通过存储信息(名称、地址、分块)的查询,让终端之间直接数据传递。P2P网络让网络上的数据流量分散化,同时管理点不仅没有服务容量的压力,而且只存储数据的索引与链接,不对数据本身负责,避免了版权与管理的麻烦。
p2p网络实现的思想:
P2P网络实际上是一种“无中央政府的”、“部落式的”网络,加入的方式就是客户端的登录,多数不需要认证,离开更不受限制,别人“取”你的东西是自愿,你拿别人的资源也不用付费,“P2P世界是和谐的”。为了激励大家在获取的同时多奉献,,因为只有奉献的越多,可供共享的也越多,开发者在你下载的同时,利用文件分块的技术,把你刚拥有的部分马上给别人分享,当然这种共享不必再经过你的允许,并且根据你的表现积分,鼓励“好”人,奖励奉献,你帮了别人,别人就来帮你。由于很多P2P网络的协议是公开的,所以加入的方式也很宽泛,不同的P2P网络还可以互通,为信息的进一步共享提供了基础。

(4)FTP: File Transfer Protocol, 文件传输协议。

9 B
JPG, JPEG, PNG是常见的静态图片,而GIF是常见的动图。TXT是text,文本。

10 B
不能随机,只能按顺序从头节点开始访问。

11 D
八位二进制能表示的无符号十进制范围为[0, 255]。
注意不要误选C。256的二进制是100000000,需要9位。
另外,八位二进制能表示的有符号十进制范围为[-128, 127]。

12 C
IP由4个字节组成,每个字节8个bit,总共32个bit。每个字节的取值范围为[0, 255]。

13 C
1/n得到的结果是0,要改为1.0/n或float(1)/n

14 C
以3.12567为例,
x * 100 + 0.5 = 313.067,
(int) (x * 100 + 0.5) = 313
(int) (x * 100 + 0.5) / 100.0 = 3.13

15 B

16 A
1 + 2 + 4 + 8 + 16 = 25 - 1 = 31

17 C
图中的度:所谓顶点的度(degree),就是指和该顶点相关联的边数。
在有向图中,度又分为入度和出度。
入度 (in-degree) :以某顶点为弧头,终止于该顶点的弧(边)的数目称为该顶点的入度。
出度 (out-degree) :以某顶点为弧尾,起始于该顶点的弧(边)的数目称为该顶点的出度。

18 B
64 < 100 < 128,即26 < 100 < 27,所以答案为7

19 B
这道题2015年或2016年也考了。

20 C
菲尔滋是数学界的奖,普利策是新闻类的奖。

二、问题求解

1

这道题有点难度
(1)M = 7, N = 3时,可用枚举法:

7 0 0
6 1 0
5 2 0
5 1 1
4 3 0
4 1 2 
3 3 1
3 2 2 

答案是8种。
(2)M = 8, N = 5时,
解法一:枚举(从左到右从大到小)

8 0 0 0 0
7 1 0 0 0
6 2 0 0 0
6 1 1 0 0
5 3 0 0 0 
5 2 1 0 0 
5 1 1 1 0
4 4 0 0 0 
4 3 1 0 0
4 2 2 0 0 
4 2 1 1 0
4 1 1 1 1
3 3 2 0 0 
3 3 1 1 0
3 2 2 1 0
3 2 1 1 1
2 2 2 2 0
2 2 2 1 1

答案:18

解法二:递归

/*
   解题分析:
        设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,
        当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(n>m) f(m,n) = f(m,m)  
        当n<=m:不同的放法可以分成两类:
        1、有至少一个盘子空着,即相当于f(m,n) = f(m,n-1);
        2、所有盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n) = f(m-n,n).
        而总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)
    递归出口条件说明:
        当n=1时,所有苹果都必须放在一个盘子里,所以返回1;
        当没有苹果可放时,定义为1种放法;
        递归的两条路,第一条n会逐渐减少,终会到达出口n==1;
        第二条m会逐渐减少,因为n>m时,我们会return f(m,m) 所以终会到达出口m==0.
*/
#include<stdio.h>

int fun(int m,int n)    //m个苹果放在n个盘子中共有几种方法
{
    if(m==0||n==1)      //因为我们总是让m>=n来求解的,所以m-n>=0,所以让m=0时候结束,如果改为m=1,
    {
        return 1;       //则可能出现m-n=0的情况从而不能得到正确解
    }

    if(n>m)
    {
        return fun(m,m);
    }
    else
    {
        return fun(m,n-1)+fun(m-n,n);
    }
}

int main()
{
    printf("%d\n",fun(8,5));

    return 0;
}

因为初赛无法现场编程,所以要利用递归公式,用纸和笔计算出来:
 f(8, 5)
= f(8, 4) + f(3, 5)
= f(8, 3) + f(4, 4) + f(3, 3)
= f(8, 2) + f(5, 3) + f(4, 3) + f(0, 4) + f(3, 2) + f(0, 3)
= f(8, 1) + f(6, 2) + f(5, 2) + f(2, 3) + f(4, 2) + f(1, 3) + 1 + f(3, 1) + f(1, 2) + 1
= f(6, 2) + f(5, 2) + f(2, 2) + f(4, 2) + f(1, 1) + f(1, 1) + 4
= f(6, 1) + f(4, 2) + f(5, 1) + f(3, 2) + f(2, 1) + f(0, 2) + f(4, 1) + f(2, 2) + 6
= f(4, 2) + f(3, 2) + f(2, 2) + 11
= f(4, 1) + f(2, 2) + f(3, 2) + f(2, 1) + f(0, 2) + 11
= f(3, 2) + 16
= f(3, 1) + f(1, 2) + 16
= f(1, 1) + 17
= 18
(3)当数更大时,用枚举会很复杂且易出错,只能用程序计算。如果出现在初赛试卷里,可以直接放弃。

2

这道题用枚举。
(1)从A经过B到达F,有四条线
ABCE,距离为12
ABCFE,距离为11
ABDFE,距离为18
ABDE,距离为14
(2)从A经过F到达E, 即AFE,距离为12
(3)从A经过G到达E
因为AGC的距离大于ABC的距离,所以经过AGC的线不用考虑了
AGDFE,距离为16
AGDE,距离为12

答案:11

相关文章

网友评论

    本文标题:2014年第二十届全国青少年信息学奥林匹克联赛初赛普及组C++题

    本文链接:https://www.haomeiwen.com/subject/dcnmbftx.html