2025年北京市海淀区中小学生信息学竞赛第二赛段-入门组真题
剩余时间 --:--:--
单选题 共 20 题
1.

以下二维数组的初始化,哪个是符合语法的?(  )

2.

回文子串指的是一个字符串中,正着读和反着读都一样的连续字符序列。S="CABCBAABCABCBCBAB",其最长回文子串的长度是()

3.

对于入栈顺序为1,2,3,4,5,6,7的序列,下列不可能是合法的出栈序列为()

4.

给定一组活动,每个活动都有开始时间si和结束时间fi。我们要安排尽可能多的活动(活动之间不能重叠),正确的贪心策略是按照()从小到大排序后依次安排活动。

5.

有12个人在玩游戏,他们围成一个圈,给定一个字符串LLLLRRLRRRLL代表每个人的“攻击”方向(L向左,R向右)。一个合法的“攻击”应满足以下二者之一:

若只有a攻击b,则b必须攻击a。若a和c同时攻击b,或a和c都不攻击b,则b可以任意攻击a和c中的一个。

你每次可以进行一次操作,使字符串中的一个字符从L变为R,或从R变为L。最少需要操作()次使得字符串所代表的“攻击”状态合法。

6.
沿着一条平直的道路旁有10棵树,它们的坐标分别为7,10,12,15,19,20,53,63,75,87,它们的高度分别为12,2,2,1,2,1,25,10,12,1。伐木工人如果砍倒一棵坐标为xi的树,并将其平放在左边或右边的一段空地上,占据一个区间[xi - hi, xi]或[xi, xi + hi],未被砍伐的树只占据一个坐标点xi。只有当区间中没有任何被占据的点时,伐木工人才能把砍倒的一棵树平放到这个区间上。伐木工人希望尽可能多地砍伐树木,问最多能砍伐()棵树。
7.

陶陶和乐乐最近在练习跳跃技巧,跳跃规则如下:起点位于数轴的点0,如果想要到达点x,一开始可以先跳一单位,然后每次跳跃的长度都比上一次多一单位。每次跳跃可以选择向左或向右。现在陶陶想跳到坐标为56的位置,乐乐想跳到坐标为61的位置,他们两个人分别最少跳跃()次才能到达自己的目标点。

8.

同学们玩猜城市游戏,地图上有标号A、B、C、D、E。五人每人只答对一半:

甲说:B是北京,E是天津

乙说:B是湖北,D是重庆

丙说:C是湖北,D是吉林

丁说:A是重庆,E是吉林

戊说:B是天津,C是北京

正确选项是()

9.

有6本不同的书,其中语文书3本,数学书1本,英语书2本。若将这6本书排成一排,要求三本语文书必须相邻,而两本英语书不能相邻,则有()种不同的排法。

10.

从1,3,5,7中任取2个数字,从0,2,4,6,8中任取2个数字,组成没有重复数字(无前导零)的四位数,其中能被5整除的数有()个

11.

在数学中,集合是由某些确定的对象组成的整体,函数是从一个集合(称为定义域)到另一个集合(称为值域)的一种对应关系,函数要求定义域中的每一个元素都对应值域中唯一确定的元素。设集合A={1,2,3},B={a,b,c},A作为定义域,B作为值域,则从A到B的所有函数的个数为()

12.

函数是一种数学规则,它将每个输入的数字唯一地对应到一个输出数字。例如,函数f(x)=5x-2表示:对于任何输入x,先乘以5,然后减2,得到计算结果。若函数f(x)=2x+3和g(x)=x-1,那么f(g(2))的值是多少?()

13.

定义在整数集合上的数列F(x)满足:

F(x)=⎨      x-3(x≥10)

        ⎨    F(x+4)+1(x<10)

则F(4)的值为()


14.
斐波那契数列定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2)。用Si表示前i项和,则Sn可以表示为()
15.

方程x+y+z=12的正整数解(即x,y,z≥1)的组数是()

16.

以下C++程序的输出为()

#include<iostream>
usingnamespace std;

intfunc(int n)
{
    if(n<=1)
        return n;
    returnfunc(n-1)+func(n-2)+func(n-3);
}
intmain()
{
    cout<<func(6)<<endl;
    return0;
}
17.

请阅读以下C++程序,若输入两个不同整数x,y,输出结果为()

#include<iostream>
usingnamespace std;

intmain()
{
int a,b;
    cin>>a>>b;
    a=a^b;
    b=a^b;
    a=a^b;
    cout<<a;
}
18.

辗转相除法是一种求解最大公因数的方法,在横线处填入()后,该函数能正确实现相应功能。

intgcd(int a,int b)
{
    while(b!=0)
    {
    ------------
    // 横线处
    }
    return a;
}
19.

以下C++程序的时间复杂度为()

#include<iostream>
usingnamespace std;
constint N=100000;
int cnt=0, primes [100010],vis [100010];
intmain()
{
    vis [1]=1;
    for(int i=2;i<=N-1;i++)
    {
        if(!vis[i])
            primes [++cnt]=i;
        for(int j=1;primes[j]*i<=N-1;j++)
        {
            vis [primes [j]*i]=1;
            if(i%primes[j]==0)
                break;
        }
    }
    for(int i=1;i<=cnt;i++)
        cout<<primes[i]<<" ";
}
20.

以下C++程序的时间复杂度为()

intfunc(int n,int m)
{
    if(m==0||m==n)
        return1;
    return func(n-1,m-1)+func(n-1,m);
}
填空题 共 14 题
1.

请你阅读以下这段C++程序,程序输入为9 1 4 2 8 5 7 9 2 6,直接写出程序运行的结果。()

#include<iostream>
usingnamespace std;

int n,ans=0;
int h[110];

intmain()
{
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>h[i];
    int j=0, k=n-1;
    while(j<k)
    {
        int s=(k-j)*min(h[j],h[k]);
        if(h[j]<h [k])
            {
            ans=max(ans , s);
            j++;
            }
        else
        {
            ans=max(ans,s);
            k--;
        }
    }
    cout<<ans;
    return0;
}


2.

请你阅读以下这段C++程序,程序输入为2 40 9,直接写出程序运行的结果。()

#include<bits/stdc++.h>
usingnamespace std;
int a, b,p,ans=0;

intmain()
{
    cin>>a>>b>>p;
    while(b)
    {
        bool f=b&1;
        if(f)
            ans=(ans+a)%p;
        a=(a+a)%p;
        b=b>>1;
    }
    cout<<ans;
    return0;
}
3.

请你阅读以下这段C++程序,直接写出程序运行的结果。()

#include<iostream>
usingnamespace std;
int stk1[110], t1=0;
int stk2[110], t2=0;

voidfunc1(int x)
{
    stk1[++t1]=x;
}
voidfunc2()
{
    if(t2==0)
        while(t1>0)
            stk2 [++t2]=stk1[t1--];
    if(t2>0)
        t2--;
}
intmain()
{
    func1(10);func1(20);func1(30);
    func2();func1(40);
    func2();func1(50);func1(60);
    if(t1>0&&t2>0)
        cout<<stk1 [t1]+stk2[t2];
    else
        cout<<-1;
    return0;
}
4.

题目描述:给定一个长度为n的整数数组a,请你统计有多少对下标(i,j)满足i<j且aj -ai =j-i。其中1≤a_i,n≤10⁵。请你阅读以下这段C++程序并填空:

#include<iostream>
usingnamespace std;
map<int,int> cnt;
int ans=0;

intmain()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int a;
        cin>>a;
        int val=___(1)___;
        ans+=___(2)___;
        cnt[val]++;
    }
    cout<<ans;
    return0;
}
5.

甲、乙两数的最大公因数是75,最小公倍数是450。若它们的差最小,则两个数为______和______。

6.

10条直线,最多可以把平面分为______个区域。

7.

将100个小球放入依次排列的36个盒子中。如果任意相邻的5个盒子中的小球总数均为14,且第1个盒中有2个小球。那么第36个盒子中有______个小球。

8.

用0到9十个数字组成没有重复数字且没有前导零的四位数,若将这些四位数按从小到大的顺序排列,则5687是第______个。

9.

若从1,2,3,…,9这9个整数中同时取4个不同的数,其和为奇数,则不同的取法共有______种。

10.

副扑克牌共54张,最上面的一张是红桃K。如果每次把最上面的12张牌移到最下面而不改变它们的顺序及朝向,那么,至少经过______次移动,红桃K才会又出现在最上面?

11.

两对三胞胎喜相逢,他们围坐在桌子旁,要求每个人都不与自己的同胞兄妹相邻,同一位置上坐不同的人算不同的坐法,那么共有______种不同的坐法。

12.

把正方体的6个面分别写上了1到6这六个不同的数字,现在将完全相同四个正方体拼成一个长方体,那么长方体的下底面所有数字之和为______。

13.

计算机处理数据的能力非常强大的,只要你告诉它规则,它能够按照你提出的任何要求完成任务。比如你要将一个多位数27493去掉两位使剩下的数尽量大,就可以去掉2和4。现在将1~30依次写成一排:12345…282930,形成一个多位数,从这个多位数中去掉45个数字,剩下的数最大是______。

14.

信息学要研究各种信息,需要研究信息的人能够很快抓住问题的核心信息,找到核心点,复杂的问题也会变得很简单。现在要求你把1~7这7个数填入图中的7个方框里,每个数只能填一次,使得三条直线上的三个数之和恰好是8、11和15。那么在圆上的三个数的乘积最大是______。

C++ 编辑器
输入
输出