NOIP(第13届)--2007--普及组--复赛--试题与答案(NA13)

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

中小学编程红宝书.zip


关键词:

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

      2007年、普及组、复赛,第13届。

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

 



解析与答案:


1题:奖学金

1、说明

A、试题类型:

       结构体应用。

 

B、算法模型:

       结构体数组。

 

C、试题说明:

1、定义一个结构体,将语数英成绩,序号,学号放入其中。

 

2、定义一个按照要求排序的函数。

 

2、代码

#include <iostream>

#include <algorithm>

 

using namespace std;

 

struct student

{

       int chinese;//语文成绩

       int math;//数学成绩

       int english;//英语成绩

       int num;//序号

       int sum = 0;//总分

}s[301];

 

int cmp(student p1, student p2)

{//结构体

       if (p1.sum == p2.sum && p1.chinese != p2.chinese)

       {//总分相同,语文成绩高排在前

              return p1.chinese > p2.chinese;

       }

      

       if (p1.sum == p2.sum && p1.chinese == p2.chinese)

       {//总分相同,语文成绩相同,序号小在前

              return p1.num < p2.num;

       }

       else {//否则总分越高在越前

              return p1.sum > p2.sum;

       }

}

 

int n;//人数

 

int main()

{

       cin >> n;

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

       {

              s[i].num = i;

              cin >> s[i].chinese >> s[i].math >> s[i].english;

              s[i].sum = s[i].chinese + s[i].math + s[i].english;

       }

      

       sort(1 + s, 1 + n + s, cmp);//排序

      

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

       {//输出前5名

              cout << s[i].num << " " << s[i].sum << endl;;

       }

       return 0;

}

    

 

 

 

 

 

2题:纪念品分组

1、说明

A、试题类型:

       基本算法训练。

 

B、算法模型:

       贪心算法。

 

C、试题说明:

       首先排序,用最小的和最大的比。一个一个往下比。

 

找不到的话,自算。否则把那个数去掉。

 

 

2、代码

#include<bits/stdc++.h>

#include<iostream>

#include<cstdlib>

#include<cstdio>

using namespace std;

 

int n,a[30001],m,d,sum=0;

 

int main()

{

    freopen("P1094_6.in","r",stdin);

    freopen("P1094_6.out","w",stdout);

 

    bool flag=true,flag2[30001];

    memset(flag2,0,sizeof(flag2));

 

    cin>>m;

    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++)

    {

        flag=true;

        for(int j=n;j>i;j--)

        {

            if(a[i]+a[j]<=m&&flag2[i]==0&&flag2[j]==0)

            {

                flag2[i]=1;

                flag2[j]=1;

                //cout<<a[i]<<" "<<a[j]<<endl;

                flag=false;

                d=j;

                break;

            }

        }

 

        if(flag==false)

        {

            for(int j=d;j<=n-1;j++)

            a[j]=a[j+1];

            n--;

        }

        //else cout<<a[i]<<endl;;

        sum++;

    }

    cout<<sum<<endl;

    return 0;

}

 

 

 

 

3题:守望者的距离

1、说明

A、试题类型:

       基本推导。

 

B、算法模型:

       贪心。

 

C、试题说明:

       无

 

 

 

 

 

2、代码

#include<iostream>

using namespace std;

 

int main()

{

       int m,s,t,x=0,y=0,t1,f;

       scanf("%d%d%d",&m,&s,&t);

       t1=t;

      

       while(t1>0)

       {

              t1--;

              if(m>=10)

              {

                     m-=10;

                     x+=60;

              }

             

              if(m<10)

              {

                     f=0;

                     break;

              }

             

              if(x>=s)

              {

                     printf("Yes\n");

                     printf("%d\n",t-t1);

                     break;

              }

       

       }

       if(f==0)

       {

              y=x;

              while(t1>0)

              {

                     t1--;

                     m+=4;

                     if(m>=10)

                     {

                            m-=10;

                     }

 

                     if(t1>0)

                     {

                            t1--;x+=60;y=x;

                     }

                     else

                     {

                            y+=17;

                     }

 

                     if(y>=s || x>=s)

                     {

                            printf("Yes\n");

                            printf("%d %d %d\n",t-t1,t,t1);

                            break;

                     }

              }

 

              if(t1==0)

              {

                     printf("No\n");

                     printf("%d\n",y>x?y:x);

              }

       }

       return 0;

}

    

 

 

 

4题:Hanoi双塔问题

1、说明

A、试题类型:

       基本算法。

 

B、算法模型:

       递推问题,方程应用。

 

C、试题说明:

转移方程f[i] = 2 * f[i-1] + 2,由于n<=200。注意高精度。

 

2、代码

#include <iostream>   

#include <cstdio>   

using namespace std;   

 

int n,c,a[22],i,j; 

 

int main()   

{   

    cin>>n;   

    a[1]=2;  

      

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

    {   

        c=0;                    

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

        {   

            a[j]=a[j]*2+c;       

            if(j==1)  

               a[j]+=2;     

            c=a[j]/10000;        

            a[j]%=10000;          

        }   

    }

   

    i=20; 

      

    while(i>1&&!a[i])  

          i--;   

      

    cout<<a[i];

      

    while(--i)   

              printf("%04d",a[i]);   

      

    cout<<endl;   

    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