NOIP(第03届)--1997--普及组--复赛--试题与答案(NA03)

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

中小学编程红宝书.zip


关键词:

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

      1997年、普及组、复赛,第3届。

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


解析与答案:

1题:棋盘问题

1、说明

A、试题类型:

       基本逻辑题。

 

B、算法模型:

       乘方原理和加法原理。

 

C、试题说明:

       无。

 

2、代码

#include <stdio.h>

int main()

{

       int n, m, s, t;

       s=0, t=0;

       scanf("%d %d", &n, &m);

      

       int a = 1;

       int b = 1;

       int c = (m*(m-1)) >> 1;

      

       while(a <= n)

       {

              if(a == b)

              {

                     s = s + (n-a+1) * (m-b+1);

              }

             

              t = t + (n-a+1)*(c+b-1);

             

              if(a <= n)

              {

                     a ++;

              }

             

              if(b <= m)

              {

                     b ++;

              }

       }

      

       printf("%d %d", s, t);

       return 0;

}

 

 

2题:三角形问题

1、说明

 

A、试题类型:

       几何问题。

 

B、算法模型:

       直接枚举。

 

C、试题说明:

       a+b+d+f=P,只需要枚举a,b,d。

 

       根据f=P-a-b-d,计算出f。

 

 

 2、代码

#include<cstdio>

using namespace std;

 

int main()

{

       int P;

       int a,b,c,d,e,f,g,h,i;

       int count=0;

       scanf("%d",&P);

       for(a=1; a<=P&&a<=9; a++)

       {

              for(b=1; b<=P-a&&b<=9; b++)

              {

                     if(b==a) continue;

                     for(d=1; d<=P-a-b&&d<=9; d++)

                     {

                            if(d==a||d==b)

                                   continue;

                            f=P-a-b-d;

                            if(f==a||f==b||f==d)

                                   continue;

                            if(f>=1&&f<=9)

                            {

                                   for(g=1; g<=P-f&&g<=9; g++)

                                   {

                                          if(g==a||g==b||g==d||g==f)

                                                 continue;

                                          for(h=1; h<=P-f-g&&h<=9; h++)

                                          {

                                                 if(h==a||h==b||h==d||h==f||h==g)

                                                        continue;

                                                 i=P-f-g-h;

                                                 if(i==a||i==b||i==d||i==f||i==g||i==h)

                                                        continue;

                                                 if(i>=1&&i<=9) {

                                                        for(e=1; e<=P-i-a&&e<=9; e++) {

                                                               if(e==a||e==b||e==d||e==f||e==g||e==h||e==i)

                                                                      continue;

                                                               c=P-a-i-e;

                                                               if(c==a||c==b||c==d||c==f||c==g||c==h||c==i||c==e)

                                                                      continue;

                                                               if(c>=1&&c<=9)

                                                               {

                                                                      if(a<f&&f<i&&b<d&&g<h&&c<e)

                                                                      {

                                                                             count++;

                                                                             //printf("%d %d %d %d %d %d %d %d %d\n",a,b,c,d,e,f,g,h,i);

                                                                      }

                                                               }

                                                        }

                                                 }

                                          }

                                   }

                            }

                     }

              }

       }

       printf("%d",count);

       return 0;

}

 

 

3题:路径问题

1、说明

A、试题类型:

       路径问题。

 

B、算法模型:

       基本推理。

 

C、试题说明:

       初始在(1,1)的位置,然后第一步走出的位置可以为:(1,2)、(2,1),其坐标之和为3。

 

   以此类推,第二步到达的点坐标之和为4,第三步到达的点坐标之和为5。

f[i][j]表示从起点到达(i,j)的方案数,则有:f[i][j]=f[i-1][j]+f[i][j-1]。

  

flag[i][j]表示(i,j)点能否通过。

  

递推式:

for(k=3;k<=n+m;k++)

{

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

{

j=k-i;

f[i][j]=f[i-1][j]+f[i][j-1];

}

}

2、代码

#include<cstdio>

#include<algorithm>

#define maxn 60

#define l 10000000000

using namespace std;

struct number

{

    long long d1,d2; //存储方案的后20位

}f[maxn][maxn];

 

int n,m;

int flag[maxn][maxn]; //障碍标记

void start()

{

    long long s;

    f[1][1].d1=1;f[1][1].d2=0;

    for(int k=3;k<=m+n;k++)

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

              {

                     if(k-i>=1&&k-i<=m&&!flag[i][k-i])

                     {

                            int j=k-i;

                            if(j-1>=1) f[i][j]=f[i][j-1]; //将前一项给后一项赋值

                            if(i-1>=1){ //将前一项的值相加

                                   s=f[i][j].d1+f[i-1][j].d1;

                                   f[i][j].d1=s%l;

                                   f[i][j].d2=(f[i-1][j].d2+f[i][j].d2+s/l)%l;

                            }

                     }

              }

              if(f[n][m].d2==0) printf("%I64d\n",f[n][m].d1);

              else printf("%I64d%010I64d\n",f[n][m].d2,f[n][m].d1); //对前十位不足的用0填充

}

 

int main()

{

    int x1,x2,y1,y2;

    scanf("%d%d",&n,&m);

    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);

    if(x1>x2) swap(x1,x2); //对障碍的 起始点进行转换

    if(y1>y2) swap(y1,y2);

    for(int i=x1;i<=x2;i++)

              for(int j=y1;j<=y2;j++)

                     flag[i][j]=1; //对障碍进行标记

              start();

              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