2017 初赛PJ 错题解析

没脸地贴出记录

期望得分:82.5

实际得分:42.5(不借助任何资料及计算器)

出现的低级失误(共计36分):

1.T28(9) 因ubound写成rbound痛失9分(明明全对的……)

T27(3)
result%m
正确答案: result

该取模的时候才取模!不能养成步步取模的习惯

3.T8(1.5) 裸的zeller公式都能算错……还算错三遍
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1注意m+1,这玩意儿切忌心算,必须动手算!

4.T14(1.5) 若串 S = “copyright”,其子串的个数是( )。要算空串!45+1

5.T21(5) 找规律的题已经找出规律了但由于心算,痛失5分

6.T23(8) 那么大一个return 0;我没看见!痛失8分

7.T24(8) 眼残算错了一个数,这玩意儿检查的时候估计检查不出来,只能第一遍算的时候细心细心再2细心

小知识点

  • 从(2022 )年开始,NOIP 竞赛将不再支持 Pascal 语言。
  • 计算机存储数据的基本单位是(Byte)。
  • 下列不属于面向对象程序设计语言的是(C )。

搞不懂的题

第 26 题

阅读程序写结果

#include<iostream>
using namespace std;
int main()
{
    int n, m;
    cin >> n >> m;
    int x = 1;
    int y = 1;
    int dx = 1;
    int dy = 1;
    int cnt = 0;
    while (cnt != 2)
    {
        cnt = 0;
        x = x + dx;
        y = y + dy;
        if (x == 1 || x == n)
        {
            ++cnt;
            dx = -dx;
        }
        if (y == 1 || y == m)
        {
            ++cnt;
            dy = -dy;
        }
    }
    cout << x << " " << y << endl;
    return 0;
}
输入 1:4 3
输出 1:_________(3 分)

输入 2:2017 1014
输出 2:_________(5 分)

1.正确答案: 1 3
2.正确答案: 2017 1

第 25 题

阅读程序写结果

#include<iostream>
using namespace std;
int main()
{
    string ch;
    int a[200];
    int b[200];
    int n, i, t, res;
    cin >> ch;
    n = ch.length();
    for (i = 0; i < 200; i++)
        b[i] = 0;
    for (i = 1; i <= n; i++)
    {
        a[i] = ch[i - 1] - '0';
        b[i] = b[i - 1] + a[i];
    }
    res = b[n];
    t = 0;
    for (i = n; i > 0; i--)
    {
        if (a[i] == 0)
            t++;
        if (b[i - 1] + t < res)
            res = b[i - 1] + t;
    }
    cout << res << endl;
    return 0;
}
输入:1001101011001101101011110001
输出:_________

18(WA)
正确答案: 11

T17

第 17 题
设 A 和 B 是两个长为 n 的有序数组,现在需要将 A 和 B 合并成一个排好序的数组,任何以元素比较作为基本运算的归并算法在最坏情况下至少要做( )次比较。
 A. n^2
 B. n log n
 C. 2n
 D. 2n - 1
正确答案: D

考察归并排序,可参考《大话数据结构》9.8节。
这题考的是比较次数,而不是时间复杂度或空间复杂度。

先看看最好的情况,设有序数组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次
原文地址:https://www.cnblogs.com/sjsjsj-minus-Si/p/11634681.html