题目网址:
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,给关注