2021绍兴市中小学生编程比赛 [小学组]

一、单选题(每题 2 分,共 30 分)
第 1 题 下列软件中,用于编辑视频文件的是( )。
第 2 题 关于信息安全与网络道德,下列做法正确的是( )。
第 3 题 已知字符“a”的十进制ASCII 编码值是97,则字符“h”的十六进制数的ASCII 编码值是( )。
第 4 题 下列电子邮件地址格式正确的是( )。
第 5 题 某个问题的部分算法流程图如右图所示,执行这部分流程后变量x的值是( )。
第 6 题 下列计算机网络相关名词中文含义错误的是( )。
第 7 题 十进制算术表达式:5×128+3×64+7,运算结果用二进制表示为( )。
第 8 题 最新发布的小米11 Pro手机内存容量是8G,这里的8G容量是指( )个字节。
第 9 题 在C++编程中定义一个数组:bool a[8][10],程序运行时占用( )内存空间。
第 10 题 已知一个栈的入栈顺序是1、2、3、…、n,其出栈顺序为A1、A2、A3、…、An,若A1是n,则Ai是( )。
第 11 题 一个高度为h的二叉树最小节点数目是( )。
第 12 题 由2个a,3个b和4个c构成的所有字符串中,包含子串“abc”的共有( )个。
第 13 题 在下列关于计算机算法的说法正确的是( )。
第 14 题 要将数组{18,-23,114, 16,77,5,13,110}中的元素从小到大排列,每次可以交换任意两个元素,最少雷要交换( )次。
第 15 题 已如变量day=202104,能得到其百位上值1的表达式是( )。
第 16 题 若变量a为int类型,变量x、y为f1oat类型,且a=7, x=2.7, y=2.8,则执行“cout<
第 17 题 对n个元素进行排序,下来排序算法中平均时间复炔度为0(n log n)是( )。
第 18 题 绍兴市科技馆举办“创新之星”展示活动,有7个展示名额分配给报名参与活动的4所小学,每所小学至少可以获得一个名额,一共有( )种分配方案。
第 19 题 小明收到了100枚1元硬币,其中有一枚是假币,其重量稍轻,如果使用不带砝码的天平称重,最少需要称( )次,确保一定可以找出假币。
第 20 题 有13只皮卡丘,编号从1到13顺时针排成一圈,现在从编号为1的皮卡丘起1,2,3、…,18、19、…,一圈又一圈顺时针数下去。那么当数到2021时,对应的皮卡丘编号是( )。
二、判断题(每题 2 分,共 20 分)
第 21 题
#include <cstdio>
const int mod=23333;
int n,i,ans,a[1010];
int main(){
    scanf("%d", &n);
    for(i=1; i<=n; i++) {
        scanf("%d", &a[i]);
        a[i]=a[i]%mod;
    }
    ans=0;
	for(i=1; i<=n; i++) {
    	ans=ans+a[i];
        if(ans>=mod) ans=ans-mod;
    }
    printf("%d\n", ans);
    return 0;
}
判断题
第 21 题 如果输入的n为2000,则在访问数组时会越界。( )
第 22 题 如果输入的n为1,则输出结果只可能是 a[1或a[1]-23333的值。( )
第 23 题 该程序算法的时间复杂度为0(n)。( )
第 24 题 如果输入的n为 1000,a[i]为0到1000000之间的整数(下同),那么输出可能的最大值是( )。
第 25 题 如果将第13行去掉,这时输出可能的最大值是( )。
第 27 题
#include <cstdio>
int n,i,a[100010], pos;
long long ans;
int main() {
    scanf("%d", &n);
    for(i=1; i<=n; i++) scanf("%d",a+i) ;
    pos=n;
    ans=0;
    for(i=n; i>=1; i--) {
        if(a[i]>a[pos]) pos=i;
        ans+=pos-i+1;
    }
    printf("%lld\n", ans);
    return 0;
}
判断题
第 27 题 如果输入的n是不超过100000的整数,输入的a[i]是不超过1000000000的整数(下同),那么输出的ans 一定不会小于n。()
第 28 题 如果将第7行的“pos=n”改为“pos=1”,将第9行的“for(i=n;i>=1;i--)”改为“for(i=1;i<-n;i++)”,将第10行的“a[i]>a[pos]”改为“a[i]
第 29 题 如果输入的n为3,其他限制不变,那么输出的ans 可能且仅可能为3、4、5、6中的任意一个数。( )
第 30 题 如果输入的n=6,输入的a[日]分别为3、6、2、5、4、1,那么输出的ans的值是( )。
第 31 题 如果输入的n确定,那么输出的ans 可能的最大值是( )。
第 33 题
#include <cstdio>
int n,i,j,flag=1,ans1, ans2, pos,a[1010], b[1010];
int main() {
    scanf("%d",&n);
    for(i=1; i<=n;i++) scanf("%d",&a[i]);
    for(i=1; i<=n;i++) scanf("%d",&b[i]);
    for(i=1; i<n; i++) if(a[i]>a[i+1]) flag=0;
    for(i=1; i<n; i++) if(b[i]>b[i+1]) flag=0;
    if(!flag) {
        puts("invalid data");
        return 0;
    }
    ans1=0;
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            if(a[i]>b[j])ans1++;
    printf("%d\n", ans1);
    ans2=0;
    pos=0;
    for(int i=1; i<=n; i++) {
        while(pos<n&&b[pos+1]<a[i]) pos++;
        ans2+=pos;
    }
    printf("%d\n", ans2);
    return 0;
}
判断题
第 33 题 如果输入的n是不超过1000的正整数,输入的a[i]、b[i]是不超过1000000000的正整数(下同),那么输出的ans1与ans2一定相等。()
第 34 题 如果将第16行的“a[i]>b[j]”改为“a[i]
第 35 题 当输入的n是5,输入的a[i]分别为2、5、5、7、10,输入的b[i]分别为3、4、5、8、10时,输出的ans2为 ( )。
第 36 题 第20到第23行的时间复杂度为( )。
第 37 题 若输入的n确定,则输出的 ans2 可能的最大值为( )。
三、编程题(每题 25 分,共 50 分)
第 39 题 (七进制下不含5问题)给定一个整数n(n<=100000),你需要求出1到n的所有整数中,7进制下不含5的整数有多少个。
#include<cstdio>
int n,i,t,flag,ans;
int main() {
    scanf("%d",&n) ;
    (1);
    for(i=1; i<=n; i++) {
        (2);
        (3);
        while(t>0) {
            if((4)) {
                flag=0;
                break;
            }
            (5);
        }
        if(flag) ans++;
    }
    printf("%d\n", ans);
    return 0;
}
第 39 题 空①处应填( )。
第 40 题 空②处应填( )。
第 41 题 空③处应填( )。
第 42 题 空④处应填( )。
第 43 题 空 ⑤ 处应填( )。
第 45 题 (矩阵的乘法与旋转问题)一个x*y的矩阵A共有x行,每行有y个数,第i行第j个数是A[i,j]。定义一个x*y的矩阵A与一个y*z的矩阵B乘积是一个x*z的矩阵C, 矩阵C中C[i, k]的值是将所有A[i,j]*B[j,k], (1<=j<=y)求和的结果。给出三个整数x、y、z,两个大小分别为x*y、y*z的矩阵A、B,你需要求出A与B的乘积C顺时针旋转90度的结果。 数据范围:1<=x, y,z<=100, 输入矩阵中的非负整数大小不超过100。 输入格式:第一行三个整数x、y、z,接下来x行,每行y个整数,表示矩阵A;接下来y行,每行z个整数,表示矩阵B。 输出格式:z行,每行x个整数,表示矩阵C顺时针旋转90度的结果。
#include <cstdio>
int x,y,z,i,j,k;
int a[105][105],b[105][105],sun[105][105],ans[105][105];
int main() {
    scanf("%d%d%d",&x,&y,&z);
    for(i=1; i<=x; i++)
        for(j=1; j<=y; j++)
            scanf("%d",&a[i][j]);
    for(i=1; i<=y; i++)
        for(j=1; j<=z; j++)
            (1);
    for(i=1; i<=(2); i++)
        for(j=1; j<=y; j++)
            for (k=1; k<=z; k++)
                (3);
    for(i=1; i<=x; i++)
        for (k=1; k<=z; k++)
            (4);
    for(i=1; i<=z; i++)
        for(j=1; j<=x; j++) {
            printf("%d",ans[i][j]);
            if((5)) putchar('\n');
            else putchar (' ');
        }
    return 0;
}
第 45 题 空①处应填( )。
第 46 题 空②处应填( )。
第 47 题 空③处应填( )。
第 48 题 空④处应填( )。
第 49 题 空 ⑤ 处应填( )。