Advertisement

第二十五届全国青少年信息学奥林匹克联赛初赛

阅读量:

目录

一. 单项选择题 (共20题,每题1.5分,共计30分。每题有且仅有一个正确答案.)

二. 问题求解 (共2题,每题5分,共计10分)

三.阅读程序写结果 (共4题,每题8分,共计32分)

CCF NOIP2019 普及组 (C++语言) 参考答案与评分标准


25 届 ccf noip 2019 普及组初赛 c++试题卷

第二十五届全国青少年信息学奥林匹克联赛初赛

(普及组 C++语言试题)

竞赛时间:2019 年 10 月 13 日 14:30~16:30

一. 单项选择题 (共20题,每题1.5分,共计30分。每题有且仅有一个正确答案.)

1. (2019)12+(9102)16=:

A:(1001100110100111) 2 B:(116643) 8 C:(9DA7) 16 D:(9DA5) 16

2.图灵奖是信息学的最高奖项,以下获得过图灵奖的中国人是:

A:姚期智 B:姚期辉 C:马云 D:马化腾

3. 国际信息学奥林匹克竞赛缩写是:

A:NOI B:CTSC C:IOI D:ACM

4. 2.0E-3=

A:2000 B:0.002 C:8 D:-2000

5.计算2019>>6&1=

A:1 B:31 C:0 D:2019

6.使用二分算法在一个大小为n (n>=4) 中寻找第4大的整数所需的时间复杂度为:

A:O (1) B:O (nlogn) C:O (logn) D: O (n)

当x=19时,在计算过程中总共调用了f(x)的次数是(包括调用f(1)和f(2)):注释:此处运算采用向下取整方式处理。

A:3 B:4 C:5 D:6

8.上题函数中f (19) =

A:30 B:37 C:36 D:39

9.第7题中的函数值不可以用以下哪种方法求得:

A:动态规划 B:分治 C:递推 D:递归搜索

10.以下部件损坏,主机仍可正常工作的是:

A:内存条 B:硬盘 C:显示屏 D:显卡

11.对一下数据{1000, 2,3,5,4,1, 5000}进行冒泡排序,共计需交换次数为:

A:5 B:10 C:15 D:18

12.如果将人体比作计算机,那么人体的记忆中枢相当于以下计算机部件的:

A:运算器 B:中央处理器 C:控制器 D:内存

13.以下示意图中的数据结构不属于选项中的哪个数据结构:

A:大根堆 B:无向图 C:连通图 D:完全二叉树

14.dos、unix和windows的共同点是:

A:都是硬件 B:都是联网系统软件 C:都是应用软件D:都已经过时

15.html是一种高级语言,以下操作可以查看html代码的是:

A:打开浏览器按F11 B:运行html.exe

C:无法查看 D:打开浏览器按F12

16.以下关于计算机病毒的说法正确的是:

A:防火墙可以防止感染 B:通过生物传播

C:一旦感染无法破解 D:计算机一次感染终身免疫

17.c++语言“实数下取整”操作是:

A: (int)x B:float(x) C:floor(x) D:ceil(x)

18.一棵n层二叉树的最多节点数减去最少节点数等于:

A:2n B:2n-n C:n2-n D:nlog2(n)-n

19.现给出以下程序:

#include<bits/stdc++.h>

using namespace std;

int i,x;

int a[11]= {0,10,2,3,5,14,8,20,1,7,-1};

int main()

{

cin>>x;

sort(a+1,a+11);

for __(__i __=1;__i __< =10;__i++)

if ____(__a __[__i __] >=__x __)__break ;

cout __<____<__i __< <__endl ;

}

问若将此程序的输入输出看做函数,则此函数的图像不经过点:

A: (0,2) B: (2,4) C: (11,9) D: (21,11)

20.上题程序划线部分可替换为:

A: cout<<upper_bound(a,a+10,x)<<endl;

B: cout<<upper_bound(a+1,a+11,x)<<endl;

C: cout<<upper_bound(a+1,a+11,x)-a<<endl;

D: cout<<lower_bound(a+1,a+11,x)-a<<endl;

二. 问题求解 (共2题,每题5分,共计10分)

1.五位数的卡布列克运算循环节为: __

卡布列克运算是一种将一数的所有数位数字重新排列后可得的数的最大值与最小值(通过高位补零处理)的差,该运算具有循环特性。本题共有三个解,只需写出一个即可获得5分,各数字之间用逗号分隔。对于一棵勾股树(定义为:任意直角三角形的三边均有与边长等长的正方形重合;任意直角三角形的直角边为边长的正方形均与另一条直角三角形的斜边所对应的正方形重合,如图所示),设所有最小正方形的边长为a[i](1≤i≤∞),则该勾股树的最大正方形面积为:S_{max} = \sum_{i=1}^{\infty} a[i]^2

三.阅读程序写结果 (共4题,每题8分,共计32分)

复制代码
 1.

    
 #include<bits/stdc++.h>
    
 using namespace std;
    
 int main()
    
 {
    
     int a,b,c;
    
     double ans;
    
     cin>>a>>c;
    
     if (!c>>1<<1==c) c-=1;
    
     b= (a*c)/2;
    
     ans=sqrt(pow(b,3));
    
     printf("%0.2f",ans);
    
     return 0;
    
 }
    
 输入:1 3
    
 输出:             
    
    
    
    
    代码解读
复制代码
 2:

    
 #include<iostream>
    
 #include<algorithm>
    
 using namespace std;
    
 int n,a[101],i;
    
 int main()
    
 {
    
     cin>>n;
    
     for (i=1;i<=n;i++) cin>>a[i];
    
     sort(a+1,a+n+1);
    
     n=unique(a+1,a+n+1)-a-1;
    
     cout<<n<<endl;
    
     for (i=1;i<=n;i++) cout<<a[i]<<' ';
    
     cout<<endl;
    
     return 0;
    
 }
    
 输入:10
    
 20 40 32 67 40 20 89 300 400 15
    
 输出:                
    
    
    
    
    代码解读
复制代码
 3.

    
 #include<bits/stdc++.h>
    
 using namespace std;
    
 long long o=1,minn=10000000,m;
    
 struct pa{
    
     long long s;
    
     long long j;
    
     string n;
    
     long long cost;
    
 };
    
 pa  p[10005];
    
 int main()
    
 {
    
 while(cin>>p[o].s>>p[o].j>>p[o].n)
    
 o++;
    
 for(int i=1;i<o;i++)
    
 {
    
     for(int g=1;g<o;g++)
    
     p[i].cost+=abs(p[i].j-p[g].j)*p[g].s;
    
     if(p[i].cost<=minn)
    
     {
    
     minn=p[i].cost;
    
     m=i;
    
     }
    
  
    
 }
    
 cout<<p[m].n<<" "<<p[m].cost<<endl;
    
 return 0;
    
 }
    
 输入:7 9289 Vladivostok
    
 5 8523 Chabarovsk
    
 3 5184 Irkutsk
    
 8 2213 Yalutorovsk
    
 10 0 Moscow
    
 输出:                
    
    
    
    
    代码解读
复制代码
 4.

    
 #include<bits/stdc++.h>
    
 using namespace std;
    
 int a[500001],b[500001],i,n,A,B,l,r,mid;
    
 bool check(int mid)
    
 {
    
     int ii,s=0;
    
     memcpy(b,a,sizeof(a));
    
     for (ii=1;ii<=n;ii++) b[ii]-=mid*A;
    
     for (ii=1;ii<=n;ii++)
    
         if (b[ii]>0) s+= (int)ceil((double)b[ii]/B);
    
             return s<=mid;
    
 }
    
 int main()
    
 {
    
     scanf("%d%d%d",&n,&A,&B);
    
     for (i=1;i<=n;i++) scanf("%d",&a[i]);
    
     l=0;
    
     r=500010;
    
     while (l<r)
    
     {
    
     mid= (l+r)/2;
    
     if (check(mid)) r=mid;else l=mid+1;
    
     }
    
     printf("%d\n",l);
    
 }
    
 输入:
    
 10 2 3
    
 9 10 3 12 7 4 8 15 9 24
    
 输出:               
    
    
    
    
    代码解读

CCF NOIP********2019 普及组 (C****+********+**** 语言) 参考答案与评分标准

一、单项选择题 (共 20 题,每题 1.5 分,共计 30 分)

1 2 3 4 5 6 7 8 9 10
C A C B A D D B B C
11 12 13 14 15 16 17 18 19 20
B D A C D A C B B D

二、问题求解 (共 2 题,每题 5 分,共计 10 分)

1.答案为:(任答其一即可)

①59994,53955 ② :74943,62964,71973,83952 ③:61974,82962,75933,63954

2.a[1]2+a[2]2+……+a[∞]2 或 ∑a[i]2

三、阅读程序写结果 (共 4 题,每题 8 分,共计 32 分)

  1. 1.00

  2. 8

15 20 32 40 67 89 300 400

3.Yalutorovsk 112125

4.6

全部评论 (0)

还没有任何评论哟~