NOIP(第01届)--1995--普及组--复赛--试题与答案(NA01)

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

中小学编程红宝书.zip


关键词:

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

      1995年、普及组、复赛,第1届。

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

 


解析与答案:


1题:算式打印

1、说明

A、试题类型:

       数制问题。

 

B、算法模型:

       暴力搜索。

 

C、试题说明:

       无。

 

2、代码

 

#include<iostream>

using namespace std;

 

int main()

{

       int a,b,c,d,e;

       for (a=10; a<13; a++)

       {

              c = 8*a;

              d = 9*a+1;

              e = 9*a;

              b = 100*c+d;

              if (b>=1000 && b<10000 && c<100 && e>=100 && e<1000)

              {

                     cout<<a<<endl<<b<<endl<<c<<endl<<d<<endl<<e<<endl;

              }

       }

       return 0;

}

2题:方阵填数

1、说明

A、试题类型:

       方阵问题。

 

B、算法模型:

       二维数组。

 

C、试题说明:

       N阶方阵范围:1~100。

使用二维数组保存方阵数据。

注意N<=3时候的数据打印间隔。

2、代码

#include<iostream>

using namespace std;

const int N = 105;

int a[N][N]={0};

 

int main()

{

       int n,x,y,k;

       cin>>n;

       a[x=1][y=n] = k = 1;

       while (k<n*n)

       {

              while (x+1<=n && !a[x+1][y]) a[++x][y]=++k;

              while (y-1>=1 && !a[x][y-1]) a[x][--y]=++k;

              while (x-1>=1 && !a[x-1][y]) a[--x][y]=++k;

              while (y+1<=n && !a[x][y+1]) a[x][++y]=++k;

       }

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

       {

              for (int j=1; j<n; j++) cout<<a[i][j]<<" ";

              cout<<a[i][n]<<endl;

       }

       return 0;

}

 

 

 

 

 

3题:A类数、B类数

1、说明

A、试题类型:

       无。

 

B、算法模型:

       无。

 

C、试题说明:

使用位运算首先使用循环计算1到1000,然后使用对于每一个数使用位运算的“&”,判断最右的哪一位是否为1并相应的计数,判断之后右移,直到右移到这个数为0,然后判断1和0那个更多。

2、代码

#include<iostream>

using namespace std;

 

int main()

{

       int ans=0;

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

       {

              int one=0,zero=0;

              for (int j=i; j; j/=2)

                     if (j%2) one++;

                     else zero++;

            if (one>zero) ans++;

       }

       cout<<ans<<" "<<1000-ans<<endl;

       return 0;

}

 

4题:编码问题

1、说明

A、试题类型:

       编码问题。

 

B、算法模型:

       贪心应用。

 

C、试题说明:

       求编码B,两个for循环。

通过编码B求A,从后往前判断。

 

2、代码

#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

int q[10005];

int w[10005];

int vis[10005];

int main()

{

       int m,n,i,j;

       char a,b,c;

       while(~scanf("%d",&m))

       {

              memset(w,0,sizeof(w));

              memset(vis,0,sizeof(vis));

              cin>>a>>b>>c;

              if(a=='A')

              {

                     scanf("%d",&q[1]);

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

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

                     cin>>b;

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

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

                {

                    if(q[i]>q[j])

                        w[i]++;

                }

                printf("B=(");

                cout<<w[1];

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

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

                printf(")\n");

              }

              else if(a=='B')

              {

                     scanf("%d",&w[1]);

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

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

                     cin>>b;

                     int s;

                     for(i=m;i>=1;i--)

                     {

                            s=0;

                            for(j=0;j<m;j++)

                            {

                                   if(s==w[i]&&!vis[j])

                                   {

                                          q[i]=j;

                                          vis[j]=1;

                                          break;

                                   }

                                   if(!vis[j])

                                          s++;

                            }

                     }

                     printf("A=(");

                     cout<<q[1];

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

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

                     printf(")\n");

              }

       }

       return 0;

}

   

 

    

    

5题:灯的排列

2、说明

 

A、试题类型:

       排列组合。

 

B、算法模型:

       DFS应用。

 

C、试题说明:

       无。

 

2、代码

 

#include <bits/stdc++.h>

#include <iostream>

using namespace std;

typedef long long ll;

#define mem(a) memset(a,0,sizeof(a))

#define mp(x,y) make_pair(x,y)

const int INF = 0x3f3f3f3f;

const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;

 

inline ll read()

{

       ll x=0,f=1;char ch=getchar();

       while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}

       while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}

       return x*f;

}

//

const int maxn = 1e5+10;

 

int n,s,num,k;

char c;

struct node

{

       char x;

       int y;

}q[maxn];

 

void DFS(int a,int b,int c)

{   //a表示已用颜色  b表示已放格子数  c表示是否要放空格 

       if(a==num && b==n)

       {

              k++;  //同一颜色顺序下排序数 

              return ;

       }

       if(b > n) return ;

       if(!c) DFS(a+1,b+q[a].y,1);

       DFS(a,b+1,0);

}

 

int main()

{

       n = read();

       while(cin>>c, c!='Q')

       {

              int b = read();

              s += b;

              bool f = 0;

              for(int i=0; i<num; i++)

              {

                     if(q[i].x == c)

                     {

                            q[i].y += b;

                            f = 1;

                     }

              }

 

              if(!f)

              {

                     q[num].x = c;

                     q[num++].y += b;

              }

       }

 

       int per=1;

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

              per = per*i;

 

       if(n - (s+num-1) <= 0)

       {  //格子不够

              puts("0");

              return 0;

       }

       else

       {

              DFS(0,0,0);

              cout << per*k << 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