NOIP 2017 普及组初赛试题 知识点

文章涵盖了计算机基础知识,包括二进制编码、数据存储单位、网络协议,以及算法问题,如字符串子串计数、栈的操作、数组合并的比较次数。还提到了NOIP竞赛的变化和概率问题。同时涉及编程语言Pascal的使用情况和ASCII编码,以及递归和快速幂算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目网址:
https://ti.luogu.com.cn/problemset/1021

1.原码:原本二进制码
   反码:除了首位符号位不变,其它取反
补码:反码+1
注:正数原码,反码,补码是一样的;正数:符号位为0;负数:符号位为1)故选B

2.计算机存储数据的基本单位是Byte.故选B
3.WTO是世界贸易组织;
POP3 用于接收文件协议;
SMTP 用于发送文件的协议;
IMAP 用于接收来自邮件服务器的电子邮件的协议.
故选C
4.800×600×16/8/1024≈1000KB,故选A
5.计算机应用的最早领域是数值计算,故选A
6.C语言面向过程设计语言,故选A
7.NOI 的中文意思是全国青少年信息学奥林匹克竞赛( National Olympiad in Informatics )

8.

 

故选C
9.6×4×4=96,故选C
10.m-(n-1)=m-n+1,故选C
11.7 2, 7 3, 7 5, 7 4, 5 4,选C
12.a* (b + c) * d 的后缀形式是a b c + * d *,选C
13.新元素入栈后,要把栈顶指针指到新元素的位置,选C
14.长度为9的子串有9-9+1=1个,即S本身。
长度为8的子串有9-8+1=2个,即"copyrigh"和"opyright"。
长度为7的子串有9-7+1=3个,即"copyrig", “opyrigh"和"pyright”,
长度为1的子串有9-1+1=9个,即"c", “o”, “p”, “y”, “r”, “i”, “g”, “h”, “t”;
长度为0的子串有1个,即空串. (公式cnt = len * (len + 1) / 2 + 1),故选C
15.整数部分,1101 = 2^3 + 2^2 + 2^0 = 13,排除BD
小数部分,小数十进制转二进制,就是小数部分不断乘以2直到小数完全消失,计算过程中每次取整数部分作为二进制值。
0.375 * 2 = 0.75 ,取整数部分0;
0.75 * 2 = 1.5,取整数部分1,其小数部分0.5参与下次计算;
0.5 * 2 = 1,取整数部分1;
所以小数部分为011.故选A
16.A中,每次进栈一个字母,然后该字母立马出栈;
B中,先入栈a,弹出a;再入栈bcd,弹出dcb;第三次入栈e,弹出e;最后入栈fg,弹出gf;
C中,无论怎样入栈,都不会有db的出栈顺序;
D中,把所有字母进栈,再把所有字母出栈.故选C
17.这题考的是比较次数,而不是时间复杂度或空间复杂度。

先看看最好的情况,设有序数组A[4] = {1, 3, 5, 7}, 有序数组B[4] = {8, 10, 12, 14}, 数组C[8]用来存储比较后的结果。
1与8比较,把1放到C中,C[ ] = {1};
3与8比较,把3放到C中,C[ ] = {1, 3};
5与8比较,把5放到C中,C[ ] = {1, 3, 5};
7与8比较,把7放到C中,C[ ] = {1, 3, 5, 7};
剩下的不用比较,直接放到C中,C[ ] = {1, 3, 5, 7, 8, 10, 12, 14};
共比较了4次,即n次.
再看看最坏的情况,设有序数组A[4] = {1, 3, 5, 7}, 有序数组B[4] = {2, 4, 6, 8}, 数组C[8]用来存储比较后的结果。
1与2比较,把1放到C中,C[ ] = {1};
2与3比较,把2放到C中,C[ ] = {1, 2};
3与4比较,把3放到C中,C[ ] = {1, 2, 3};
4与5比较,把4放到C中,C[ ] = {1, 2, 3, 4};
5与6比较,把5放到C中,C[ ] = {1, 2, 3, 4, 5};
6与7比较,把6放到C中,C[ ] = {1, 2, 3, 4, 5,6};
7与8比较,把7放到C中,C[ ] = {1, 2, 3, 4, 5, 6, 7};
最后的8不用比较,直接放到C中,C[ ] = {1, 2, 3, 4, 5, 6, 7, 8};
共比较了7次,即2n - 1次.故选D
18.从2022年开始,NOIP 竞赛将不再支持 Pascal 语言.故选C
19.设P(A)表示至少两个人生日在同一月份的概率,P(A’)表示四个人的生日都不在同一月份的概率,则P(A) = 1 - P(A’);
P(A’) = A(12, 4) / 12 ^ 4 = 12 ×11 ×10 ×9 / (12× 12 × 12 × 12)= 55 / 96;
P(A) = 1 - P(A’) = 41 / 96.故选C
20.奥斯卡是电影类的奖项;
诺贝尔有六种奖项:物理、化学、生物和医疗、文学、经济、和平;
普利策是新闻类的奖项.故选B
21.走法见上图,第1步,X轴+1,第2步,Y轴-2,第3步X轴-3,第4步,Y轴+4,第5步,X轴+5,...,可以找出规律:假设走的步数为n,n%4,余1是X轴+n,余2是Y轴-n,余3是X轴-n,余0是Y轴+n,2017%4=1,2016%4=0,所以x轴是1-3+5-7+9...+2017=1+(-3+57+9...-2015+2017)=1+1008/2*2=1009,y轴是-2+4-6+8-10...+2016=1008/2×2=1008。所以最终坐标是(1009,1008).故答案为:1009,1008
22.要想最少步地把所有归0,那么就要把尽多的1改变.
1.观察可得:操作第三行的第四个数,可以改变更多的1;
2.把操作之后的图画出,继续观察,可得:操作第三行的第三个数,可以改变更多的1;
3.把操作之后的图画出,继续观察,可得:操作第一行的第一个数,可以改变更多的1;
然后便全部归0,3步结束。故答案为:3
23.就硬模拟即可( ASCII (American Standard Code for Information Interchange)),答案为**z**
24.就硬模拟即可( 函数的递归 ),答案为:8
25.将100和1101011001101101011110001切开,左侧为1,右侧有10个0,故答案为:**11**
26.就硬模拟即可,答案为:(1)1 3(2)2017 1
27.:完整代码(快速幂):

#include<iostream>
using namespace std;
int x, p, m, i, result;
int main(){
    cin >> x >> p >> m;
    result =1 /*①*/;
    while (p>0 / p!=0 / p /*②*/){
        if (p % 2 == 1)
            result =result * x % m /* ③*/;
        p /= 2;
        x =x * x % m /*④*/;
    }
    cout <<result  /*⑤ */<< endl;
    return 0;
}

28.完整代码(_将所有绳子的长度求和然后除以m,可以得到绳段理想情况下的最大长度,由于题目要求绳段长度为整数,如果该值小于1,则无法分割。通过二分法在上下限之间不断迭代,计算每一个mid对应的绳段数目,如果段数小于m,则长度需要减小,落在[lbound, m]之间;如果段数大于m,则长度可以增加,落在[m, ubound]之间,当区间小于1时跳出循环。_)

#include<iostream>
using namespace std;
int n, m, i, lbound, ubound, mid, count;
int len[100]; // 绳子长度
int main()
{
    cin >> n;
    count = 0;
    for (i = 0; i < n; i++)
    {
        cin >> len[i];
        count=count+len[i] / count+=len[i] /*①*/;
    }
    cin >> m;
    if (count<m / m>count/*②*/)
    {
        cout << "Failed" << endl;
        return 0;
    }
    lbound = 1;
    ubound = 1000000;
    while (lbound<ubound / ubound>lbound/*③*/)
    {
        mid =(lbound+ubound+1)/2 / (lbound+ubound+1)>>1 / (lbound+ubound)/2+1/*④*/;
        count = 0;
        for (i = 0; i < n; i++)
            count=count+len[i]/mid / count+=len[i]/mid/*⑤*/;
        if (count < m)
            ubound = mid - 1;
        else
            lbound = mid;
    }
    cout << lbound << endl;
    return 0;
}


蒟蒻写的博客,请多多关照orz,给关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值