NOIP(第11届)--2005--普及组--复赛--试题与答案(NA11)

2022-07-07 已有0人阅读 作者: IT航班

中小学编程红宝书.zip

关键词:

北京中关村;海淀黄庄;北京大学;清华大学。少儿编程;中小学编程;信息学竞赛;计算机竞赛;NOIP;NOIP竞赛;CSP-J/S竞赛;NOI竞赛。北京中学;东坝。

      2005年、普及组、复赛,第11届。

面向6-18岁中小学生,做最专业的中小学编程教育。


解析与答案:

1题:淘淘摘苹果

1、说明

A、试题类型:

       生活问题。

 

B、算法模型:

       基本推理。

 

C、试题说明:

       无。

 

 

2、代码

#include <stdio.h>

#include <stdlib.h>

 

int main()

{

       int appleh[10], benchh, taoh, bentaoh, i;

       benchh = 30;    //板凳的高度

       for (i=0; i<10; i++)    //循环输入苹果的高度

       {

              scanf("%d", &appleh[i]);

       }

 

       scanf("%d", &taoh);     //输入淘淘的高度

       bentaoh = benchh + taoh;    //淘淘站在板凳上的高度

 

       int n = 0;

       for (i=0; i<10; i++)    //判断能否摘到苹果

       {

              if(appleh[i] <= bentaoh)

              {

                     n++;    //如果能够摘到苹果计数加一

              }

       }

       printf("%d\n", n);

       return 0;

}

    

 

 

 

 

2题:校门外的树

1、说明

A、试题类型:

       推理题。

 

B、算法模型:

       无。

 

C、试题说明:

       输入一个大的整数闭区间,及一些可能互相重叠的在该大区间内的小的整数闭区间。在大的整数闭区间内去除这些小的整数闭区间,问之后剩下的可能不连续的整数区间内有多少个整数。这个题目给出的范围是大的区间在1~10000 以内,要去除的小的区间的个数是100 个以内。因为规模较小,所以可以考虑用空间换时间,用一个大数组来模拟这些区间,数组中的每个数表示区间上的一个数。

 

例如,如果输入 L 的长度是 500,则据题意可知最初有 501 棵树。就用一个 501 个元素的数组来模拟这 501 棵树,数组的下标分别代表从 1 到 501 棵树,数组元素的值代表这棵树是否被一走。最初这些树都没有被移走,所以所有数组元素的值都用 true 来表示。每当输入一个小区间,就将这个区间对应的树全部移走,即将这个区间对应的数组元素下标指示的元素的值置成 false。

 

如果有多个区间对应同一个数组元素,会导致多次将某个数组元素置成 false。不过这并不影响结果的正确性。当所有小区间输入完成,可以数一下剩下的仍旧为 true 的元素的个数,就可以得到最后剩下的树的数目。

 

当然如果最开始输入的区间不是 500,则使用的数组大小就不是 500。因为题目给出的上限是 10000,可以定义一个大小是 10001 个元素的数组,这样对所有输入都是够用的。

 

2、代码

#include <iostream>

using namespace std;

 

int main()

{

       int L,i,j,n;

       bool trees[10001];// 用一个布尔数组模拟树的存在情况。

       for(i=0;i<10001;i++)

       {// 赋初值

              trees[i]=true;

       }

 

       cin>>L>>n;

       for(i=0;i<n;i++)

       {

              int begin,end;

              cin>>begin>>end;

              for(j=begin;j<=end;j++)

              {

                     // 将区间内的树移走,即赋值为 false。

                     trees[j]=false;

              }

       }

 

       int count=0;

       //用 count 计数,数数剩余的树的数目。

       for(i=0;i<=L;i++)

       {

              if(trees[i])

              {

                     count++;

              }

       }

       cout<<count<<endl;

       return 0;

}

 

    

 

3题:采药

1、说明

A、试题类型:

       生活问题。

 

B、算法模型:

       背包问题,求最大价值,动态规划。

 

C、试题说明:   

说明:dp[i][j]代表的是当背包剩余容积为j,已经判定了i个物品时,背包的最优情况。

 

2、代码

 

#include <stdio.h>

#include <string.h>

 

#define max(x,y) (x>y)?x:y

 

int main ()

{

    int T,M,a,b;

    scanf("%d %d",&T,&M);

    int i,j;

    int dp[M+1][T+1];

 

    memset(dp,0,sizeof(dp));

    for(i=1;i<=M;i++)

    {

        scanf("%d %d",&a,&b);

        for(j=1;j<=T;j++)

        {

            if(j>=a)

                dp[i][j]=max(dp[i-1][j],dp[i-1][j-a]+b);

            else

                dp[i][j]=dp[i-1][j];

        }

       

    }

    printf("%d",dp[M][T]);

    return 0;

}

 

4题:循环

1、说明

A、试题类型:

       暴力。

 

B、算法模型:

       高精度问题。

 

C、试题说明:

       无。

 

2、代码

#include<bits/stdc++.h>

using namespace std;

 

#define cpy(x,y) for(int v=1;v<=k;v++)x[v]=y[v];

 

int xh[11]={1,1,4,4,2,1,1,4,4,2};

int k,b[205],c[205],d[205],p[205],q[205],ans[205],tot1,tot2=2,t;

char a[105];

 

void mul1(int x[],int y[],int z[])

{

    for(int i=1;i<=k;i++)

       {

        for(int j=1;j<=k;j++)

              {

            z[i+j-1]+=x[i]*y[j];

            z[i+j]+=z[i+j-1]/10;

            z[i+j-1]%=10;

        }

    }

}

 

void mul2(int x[],int y,int z[])

{

    for(int i=1;i<=k;i++)

       {

        z[i]+=x[i]*y;

        z[i+1]+=z[i]/10;

        z[i]%=10;

    }

}

 

int main()

{

    scanf("%s%d",a+1,&k);

    int len=strlen(a+1);

    for(int i=len;i>=len-k+1;i--)

        c[++tot1]=a[i]-'0';

      

    for(int i=1;i<=k;i++)

        b[i]=c[i];

      

    for(int i=1;i<xh[c[1]];i++)

       {

        memset(d,0,sizeof(d));//这个一定要加,如果放在mul1里面就会wa

        mul1(b,c,d);

        cpy(b,d);

    }

      

    ans[1]=xh[c[1]];

    cpy(q,b);

    cpy(p,b);

      

    while(tot2<=k)

       {

        cpy(b,c);

        while(t<11)

              {

            memset(d,0,sizeof(d));

            mul1(b,p,d);

            t++;

            cpy(b,d);

            if(b[tot2]==c[tot2])

                break;

            memset(d,0,sizeof(d));

            mul1(q,p,d);

            cpy(q,d);

        }

             

        if(t==11)

              {//无解

            printf("-1");

            return 0;

        }

             

        cpy(p,q);

        memset(d,0,sizeof(d));

        mul2(ans,t,d);

        for(int i=1;i<=100;i++)//计算答案

            ans[i]=d[i];

        tot2++;

        t=0;

    }

      

    int anslen=101;

    while(ans[anslen]==0&&anslen>1)

        anslen--;

      

    for(int i=anslen;i>=1;i--)

        printf("%d",ans[i]);

      

    return 0;

}

 

 

 



 

IT航班提供:课程视频、、课程书籍、竞赛辅导、少儿编程指导、课程采购、加盟、少儿编程资料、少儿编程课程、保送生、特长生、加分、中小学计算机教育、中小学信息学、竞赛、中小学信息学课程、人工智能、中小学编程加盟、少儿编程加盟、品牌加盟、技术加盟、技术指导、课程加盟、师资培训、中小学编程教辅资料、中小学编程教师培训、少儿编程教学书籍、少儿编程视频、教学书籍、教师培训、教学视频、CSP-J/S、中小学信息学课程服务、竞赛指导、课程提供、国内外计算机中小学计算机竞赛、信息学竞赛、信息学课程提供商、信息学奥林匹克。

      

IT航班支持----中小学编程比赛汇总:

 

第一部分:国内比赛(IT航班支持)   

1、软件能力认证(CSP-JS) 

2、全国青少年信息学奥林匹克联赛(NOIP)    

3、全国青少年信息学奥林匹克竞赛(NOI)

4、中国青少年………………………  

5、………………………创新挑战赛  

6、全国青少年………………………  

7、………………………

8、 恩欧希教育信息化发明创新奖  

9、世界机器人大赛(WRC) 

10、………………………大赛    

11、少………………………智能教育成果展示大赛 

12、“明天小小科学家”奖励活动

13、………………………    

14、………………………    

15、国际信息学……………………… 

16、………………………    

 

第二部分:国际比赛(IT航班支持)   

17、………………………    

18、国际………………………    

19、………………………

20、美国信息学……………………… 

21、加拿大……………………… 

22、官方邀请赛 (CCO)     

23、国际计算思维………………………    

24、美国计算机……………………… 

25、澳大利亚………………………    

 

第三部分:企业比赛(IT航班支持)   

26、微软MTA    

27、………………………挑战赛 

28、………………………科学奖 

29、………………………学奖    

30、………………………创新挑战赛 

31、………………………挑战赛 

32、………………………芯计算机表演赛 

33、………………………大赛    

 

第四部分:Scratch相关竞赛(IT航班支持)    

34、全国中小学生电脑制作大赛     

35、………………………    

36、………………………    

37、………………………    

 

第五部分:其它(IT航班支持)   

38、NOI夏令营  

39、NOI冬令营(NOIWC)  

40、全国青少年……………………… 

41、国际青少年………………………

 

联系方式:

A、官方网址:

http://www.itflight.net


B、微信公众号:

添加微信,获取资料。

image.png

 



关注公众号,获取动态。

image.png