#YGAP16. 市赛模拟题(二)

市赛模拟题(二)

选择题

1.计算机的运算速度取决于给定的时间内,它的处理器所能处理的数据量。处理器一次能处理的数据量叫字长。已知 64 位奔腾处理器一次能处理 64 个信息,相当于()字节。{{ select(1) }}

  • 8个
  • 1个
  • 16个
  • 2个

2.用某种排序方法对数列{25,84,21,47,15,27}进行排序,数列变化如下:

{15,84,21,47,25,27} 

{15,21,84,47,25,27} 

{15,21,25,47,84,27}

那么排序方法是(){{ select(2) }}

  • 冒泡
  • 选择
  • 插入
  • 快速

3.小明家突然断电了,以下仍能保存数据的是:( ){{ select(3) }}

  • rom
  • ram
  • 高速缓存
  • 寄存器

4.现有一张分辨率2048×1024 像素的 32 位真彩色图像。请问要存储这张图像,需要多大的存储空间?{{ select(4) }}

  • 16MB
  • 4MB
  • 8MB
  • 2MB

5.计算机为了要在网络中和其他计算机交流数据,什么东西是必不可少的?{{ select(5) }}

  • 网线
  • 路由器
  • 网络协议
  • 电子邮箱

6.二进制数 1011 转换成十进制数是( )。{{ select(6) }}

  • 11
  • 10
  • 13
  • 12

7.运行以下代码片段的行为是()

int x = 101; 
int y = 201; 
int *p = &x; 
int *q = &y;
p=q;

{{ select(7) }}

  • 将 x 的值赋为 201
  • 将 y 的值赋为 101
  • 将 q 指向 x 的地址
  • 将 p 指向 y 的地址

8.由 1,1,2,2,3 这五个数字组成不同的三位数有()种{{ select(8) }}

  • 18
  • 15
  • 12
  • 24

9.以下和计算机领域最密切相关的奖项是( )。{{ select(9) }}

  • 菲尔兹奖
  • 图灵奖
  • 诺贝尔奖
  • 普利策奖

10.目前主流计算机储存数据采用( )进行储存。{{ select(10) }}

  • 二进制
  • 十进制
  • 八进制
  • 十六进制

11.定义 n!=1*2*3*....*n,则 100!的末尾 0 的个数为{{ select(11) }}

  • 23
  • 24
  • 25
  • 26

12.已知定义 int a[][3] = {1, 2, 3, 4, 5, 6, 7, 8}; 则以下哪个选项结果为10。{{ select(12) }}

  • a[0][1] + a[2][1]
  • a[1][0] + a[2][1]
  • a[1][1] + a[2][1]
  • a[1][1] + a[2][2]

13.已经 f[i]=f[i-1]+f[i-2]*2(i>=2),f[0]=f[1]=1,则 f[6]=( ){{ select(13) }}

  • 21
  • 43
  • 85
  • 41

14.某个非负整数的二进制、十进制、十六进制的表示均一致,则这个数是(){{ select(14) }}

  • 1
  • 0
  • 无数多个
  • 1和0

15.电线上停着两种鸟(A、B),可以看出两只相邻的鸟将电线分为了一个线段,这些线段可分为两类:一类是两端的小鸟相同;另一类是两端的小鸟不相同。已知:电线上两个顶点处正好停着相同的小鸟。则两端为不同小鸟的线段数目一定是{{ select(15) }}

  • 奇数
  • 偶数
  • 可奇可偶
  • 数目不定

程序阅读题

程序A:

char st[100];
int main(){
    scanf("%s",st);
    int n =strlen(st);
    for(int i=1;i<=n;++i){//第17题
        char c=st[i-1];//第18题
        if(c>='a' && c<='z') st[i-1]=c-'a'+'A';
    }
    printf("%s",st);
    return 0;

16.输入的字符串只能由小写字母或大写字母组成, 否则程序运行时会发生错误{{ select(16) }}

  • 正确
  • 错误

17.若将第 5 行的“i=1”改为“i=0”,程序运行时会发生错误。{{ select(17) }}

  • 正确
  • 错误

18.若将第 6 行的“st[i-1]”改为“st[i]”,程序运行结果不会改变。{{ select(18) }}

  • 正确
  • 错误

19.若输入的字符串为“abc123ABC”,那么输入的字符串跟输出的字符串相比,有()个字符不同。{{ select(19) }}

  • 3
  • 6
  • 9
  • 0

20.若输入的字符串为( ),输出的字符串和输入的字符串相同{{ select(20) }}

  • abc123
  • aBc123
  • ABc123
  • ABC123

程序B

#include<bits/stdc++.h>
using namespace std;
bool vis[200010];
int ans;
void zs(int n){
    for(int i=2;i<=n;i++){
        if(vis[i]==0){
            ans++;
            for(int j=2;i*j<=n;j++){//第24题
                vis[i*j]=1;
            }
        }
    }
}
int main(){
    int n;
    cin>>n;
    zs(n);
    cout<<ans<<endl;
    return 0;
}

21.若输入的 n 的值为 10,则输出结果为 4。{{ select(21) }}

  • 正确
  • 错误

22.若输入的 n 的值为 20,则输出结果为 7。{{ select(22) }}

  • 正确
  • 错误

23.若 vis[n]的值为 0,则说明 n 是质数。{{ select(23) }}

  • 正确
  • 错误

24.为了提升程序效率,可以将第 9 行的“int j=2”改为“int j=i”{{ select(24) }}

  • 正确
  • 错误

25.对该程序的复杂度估算最准确的是{{ select(25) }}

  • O(n)O(n)
  • O(n2)O(n^2)
  • O(nlogn)O(n \log n)
  • O(nlog(logn))O(n* \log (\log n))

程序C

#include<bits/stdc++.h>
using namespace std;
long long n,a[50005],ks,s=1,ans;//第26题
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++){
        if(a[i]==a[i-1]) s++;
        else{
            ans=max(ans,s);//第28题
            s=1;
        }
    }
    cout<<ans;
    return 0;
}

假设输入的正整数 n 的值不超过 50000, 0 <= a[i]<= 1000000000,请回答以下问题:

26.根据数据范围,第 3 行的 long long 可以改为 int{{ select(26) }}

  • 正确
  • 错误

27.在同一组数据下,第 12 行的 a[i]==a[i-1]可以改为 a[i]==a[i+1],结果不变{{ select(27) }}

  • 正确
  • 错误

28.第 11 行与第 12 行互换,会影响输出结果{{ select(28) }}

  • 正确
  • 错误

29.最后输出的 ans 值有可能为 0{{ select(29) }}

  • 正确
  • 错误

30.若输入的 n 为 10,10 个数分别为 8 5 7 4 0 7 1 3 0 9,结果为{{ select(30) }}

  • 0
  • 1
  • 2
  • 3

程序D

#include<bits/stdc++.h>
using namespace std;
int n;//第31题
int fac(int n){
    if(n==1||n==0) return 1;
    return fac(n-1)+fac(n-2);
}
int main(){
    cin>>n;//第32题
    cout<<fac(n);
    return 0;
}

31.第 3 行定义的变量 n 与第 4 行定义的变量 n 意义相同。{{ select(31) }}

  • 正确
  • 错误

32.把第 3 行定义变量的语句移动到第 9 行,不影响程序执行。{{ select(32) }}

  • 正确
  • 错误

33.不考虑其他因素,把第 4 行的 int fac 改成 long long fac,此程序就能正确算出 n 为50 时的结果{{ select(33) }}

  • 正确
  • 错误

34.此程序的时间复杂度是{{ select(34) }}

  • O(n)O(n)
  • O(n2)O(n^2)
  • O(nlogn)O(n \log n)
  • O(2n)O(2^n)

35.若输入 10,输出结果是{{ select(35) }}

  • 1
  • 55
  • 89
  • 144

完善程序题

程序A (回文数)回文数指的是一个数字,从左到右读和从右到左读都一样。例如,1221 和 1234321是回文数,1234 不是回文数。现有 n 个正整数 ai(i=0,1,2,3,.....n-1),请找出其中最大的回文数

#include<bits/stdc++.h>
using namespace std;
long long n,s,a[10005],s1,x,ans;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("第36题",&x);
        s=x;
        第37题;
        while(s>0){
            s1=第38题;
            第39题;
        }
        if(s1==x) ans=第40题;
    }
    cout<<ans;
    return 0;
}

36ti{{ select(36) }}

  • %lld
  • %d
  • %c
  • %f

37ti{{ select(37) }}

  • x=0
  • s1=0
  • s=0
  • ans=0

38ti{{ select(38) }}

  • s1*10
  • s%10
  • s1*10+s%10
  • s1*10+s/10

39ti{{ select(39) }}

  • x/=10
  • s/=10
  • x%=10
  • s%=10

40ti{{ select(40) }}

  • s
  • x
  • min(x,ans)
  • max(x,ans)

程序B (幸运数字)假设幸运数字是 7。现在小明和小华手上各有 n 个数,他们想每人从中选择一个数,然后把两个数相加,所得的和如果能被 7 整除,则小明和小华觉得自己是幸运的。求小明和小华觉得自己是幸运的选择方案数

#include<bits/stdc++.h>
using namespace std;
int n,t,a[10],b[10];
int main(){
    cin>>n;
    int ans=第41题;
    for(int i=1;i<=n;i++){
        scanf("%d",&t);
        第42题;
    }
    for(int i=1;i<=n;i++){
        scanf("%d",&t);
        b[t%7]++;
    }
    for(int 第43题){
        ans+=a[i]*第44题;
    }
    ans+=第45题;
    cout<<ans;
    return 0;
}

41ti{{ select(41) }}

  • 1
  • 0
  • n
  • n+1

42ti{{ select(42) }}

  • a[i]=t
  • a[t]++
  • a[t%7]++
  • a[t%10]++

43ti{{ select(43) }}

  • i=0;i<=6;i++
  • i=1;i<=6;i++
  • i=0;i<=n;i++
  • i=1;i<=n;i++

44ti{{ select(44) }}

  • b[0]
  • b[i]
  • b[n-i]
  • b[7-i]

45ti{{ select(45) }}

  • a[0]*b[0]
  • a[0]+b[0]
  • a[7]*b[7]
  • a[n]*b[n]

程序C

(质因数)从小到大打印正整数 n 以内的所有质因数(既是质数,又是 n 的因数的数)

#include<bits/stdc++.h>
using namespace std;
int fac[10000+5],n,t,i;
int main(){
    cin>>n;
    for(int i=2;i<=n;i++){
        if(第46题){
            bool isprime=true;
            for(int j=0;j<t;j++){
                if(第47题){
                    isprime=第48题;
                    break;
                }
            }
            if(第49题) fac[t++]=i;
        }
    }
    for(int k=0;k<t;k++){
        cout<<第50题<<" ";
    }
    return 0;
}

46ti{{ select(46) }}

  • n%i==0
  • n%i==1
  • n%(i-1)==0
  • n%(i-1)==1

47ti{{ select(47) }}

  • i%fac[j]==0
  • fac[j]%i==0
  • i%fac[j]!=0
  • fac[j]%i!=0

48ti{{ select(48) }}

  • false
  • true
  • (i<=fac[j])
  • (i==fac[j])

49ti{{ select(49) }}

  • n%i==0
  • i<=t
  • isprime
  • !isprime

50ti{{ select(50) }}

  • n/fac[k]
  • fac[k]
  • fac[k]-1
  • n/(fac[k]-1)

程序D (风景点)给出 N 行 M 列的二维格子, 每个格子要么是‘ #’ ,要么是‘ .’ 。 一个格子是“ 风景点” ,它同时满足如下两个条件:

1、 该格子是‘ .’;

2、 该格子的上、 下、左、 右, 四个方向整条线全部都是‘ .’(该点处于边缘的话可以忽略该点没有的方向,如点在左边缘只需考虑上、下、右三个方向)。

你的任务是统计总共有多少个“ 风景点” 。

#include<bits/stdc++.h>
using namespace std;
第51题 a[1001][1001];
int n,m,ans;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            bool book=true;
            if(第52题){
                for(int k=1;k<=第53题;k++){
                    if(第54题!='.') book=false;
                }
                for(int k=1;k<=n;k++){
                    if(a[k][j]!='.') book=false;
                }
                if(第55题) ans++;
            }
        }
    }
    cout<<ans;
    return 0;
}

51ti{{ select(51) }}

  • int
  • long long
  • char
  • string

52ti{{ select(52) }}

  • a[i][j]=='.'
  • a[i][j]=='#'
  • a[i][j]==1
  • a[i][j]==0

53ti{{ select(53) }}

  • i
  • j
  • n
  • m

54ti{{ select(54) }}

  • a[i][k]
  • a[j][k]
  • a[k][i]
  • a[k][j]

55ti{{ select(55) }}

  • a[i][j]=='.'
  • a[i][j]=='#'
  • book
  • !book

程序E

(连续区间)现有 n 个整数,每个整数用 ai 表示(1<=ai<=n)。现希望找出连续的一段区间,要求区间内不能出现重复数字。求符合要求的区间的最大长度。

#include<bits/stdc++.h>
using namespace std;
int n,a[100001],m=-1,b[1000001];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int 第56题;R<=n;第57题){
        第58题;
        while(第59题){
            b[a[L]]--;
            L++;
        }
        m=max(m,第60题);
    }
    return 0;
}

56ti{{ select(56) }}

  • L=0,R=0
  • L=0,R=1
  • L=1,R=0
  • L=1,R=1

57ti{{ select(57) }}

  • L++
  • R++
  • L++,R++
  • 不填

58ti{{ select(58) }}

  • b[a[R]]++
  • a[R]++
  • b[a[L]]++
  • a[L]++

59ti{{ select(59) }}

  • a[R]>1
  • b[a[R]]>1
  • a[L]>1
  • b[a[L]]>1

60ti{{ select(60) }}

  • b[a[R]]
  • b[a[L]]
  • R-L
  • R-L+1

程序F (看电视)给出 n 个节目的时间表,每个节目用两个整数 si 和 ei 表示第 i 个节目的开始和 结束时间。节目间存在时间重叠的情况,问最多可以完整看完多少个节目?

#include<bits/stdc++.h>
using namespace std;
struct f{
    int s,e;
}a[10000+5];
bool cmp(f a,f b){
    if(a.e!=b.e) return 第61题;
    return a.s>b.s;
}
int n,ans,k;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i].s>>a[i].e;
    sort(a+1,a+n+1,cmp);
    k=第62题;
    ans=1;
    for(int i=第63题;i<=n;i++){
        if(第64题){
            k=a[i].e;
            第65题;
        }
    }
    cout<<ans;
    return 0;
}

61ti{{ select(61) }}

  • true
  • false
  • a.e<b.e
  • a.s<b.s

62ti{{ select(62) }}

  • a[1].e
  • a[1].s
  • 0
  • 1

63ti{{ select(63) }}

  • 1
  • 2
  • k
  • k+1

64ti{{ select(64) }}

  • a[i].s>k
  • a[i].s>=k
  • a[i].e>k
  • a[i].e>=k

65ti{{ select(65) }}

  • ans+=a[i].s
  • ans+=a[i].e
  • ans++;
  • k++,ans++