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

2022-07-04 已有0人阅读 作者: 美联航达

中小学编程红宝书.zip

关键词:

北京中关村;海淀黄庄;北京大学;清华大学。少儿编程;中小学编程;信息学竞赛;计算机竞赛;NOIP竞赛;CSP-J/S竞赛;NOI竞赛。1995年、提高组、复赛,第1届。


 


第1题:编码问题

1、说明

A、试题类型:

       编码问题。

 

B、算法模型:

       基本逻辑。

 

C、试题说明:

       给出数组A求数组B的话,就是把数组A里的每个数据都和前面的数对比,如果大于前面的数计数器加一,最后把计数器的结果放到数组B中;

 

给出B数组来求A数组的话,就是把数组B里的每个数据都和前面的数对比(为了方便在代码里都是输入数组A,输出数组B),如果小于等于前面的数,前面的数加一。

2、代码

#include <stdio.h>

 

int a[50]={0},b[50]={0};

 

int main()

{

    char x;

    int n,i,j,t,num_b=0;

    scanf("%d",&n);

    getchar();

    scanf("%c=(",&x);

    if(n!=0) scanf("%d",&t);

    a[0]=t;

      

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

       {

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

        a[i]=t;

    }

    scanf(")");

      

    if(x=='A'){

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

              {

            num_b=0;

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

                     {

                if(a[i]>a[j]) num_b++;

            }

            b[i]=num_b;

        }

             

        printf("B=(%d",b[0]);

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

              {

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

        }

        printf(")");

    }

      

    if(x=='B')

       {

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

              {

            b[i]=a[i];

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

                     {

                if(b[i]<=b[j]) b[j]++;

            }

        }

             

        printf("A=(%d",b[0]);

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

              {

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

        }

        printf(")");

    }

    return 0;

}

 

 

 

第2题:灯的排列问题

1、说明

A、试题类型:

       排列组合问题。

 

B、算法模型:

       DFS。

 

C、试题说明:

首先可以将同种颜色的灯的个数化为1个,即n-m+1,灯颜色种数为m;

 

灯之间一定有m-1个空格且每个灯占用一个空格,则剩下s = n-2*m+1个空格;灯旁边有m+1个间隙;

 

可以考虑为s个空格插在m+1个间隙中,一个间隙可以插入0个,1个或多个空格,那么可以用DFS来遍历间隙即可。

 

上面的问题归结为数学模型:

 

将同一种颜色的灯归到一起,看成一个dfs出一种颜色顺序下的所有顺序;

 

再将它乘上N种颜色的排列数N!得到总排列数。

2、代码

#include<iostream>

using namespace std;

 

int n,m,ans;

 

void DFS(int k,int sum);

 

int main()

{

    while(cin>>n)

       {

        ans=m=0;

        char c;

        int x;

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

              {

            cin>>x;

            n-=x-1;  ++m;

                     cout<< "the total n is: "<<n<<endl;

        }

        int s=n-2*m+1,p=1;

             

        cout<<"the empty place is: "<<s<<endl;

        cout<<"the lamp  has types is: "<<m<<endl;

             

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

            p*=i;      //m个种类的灯的全排列

             

        m+=1;

        DFS(1,s); //深度遍历求得m+1个间隙中插入最多S个空格的方案数

        ans*=p; 

        cout<<ans<<endl;

    }

      

    return 0;

}

 

void DFS(int k,int sum)

{

    cout<<"the k is :"<<k<<endl;

      

    if(k==m||!sum)

       {

        ++ans;

        cout<<"the ans is:"<<ans<<endl;

        return;

    }

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

    {

        DFS(k+1,sum-i);

        cout<<"the i is:"<<i<<endl;

    }

}

 

 

第3题:积木堆放

1、说明

A、试题类型:

       逻辑应用。

 

B、算法模型:

       方程推导。

 

C、试题说明:

程序要求:给出第四层与第三层的数据后,将第一、二层的每块积木标上相应的数据,输出整个完整的积木图。

 

第三层的数据是由第四层的数据用以下计算公式计算出来的:A = B * C + B。

 

也就是:8=2*3+2,15=3*4+3,……14=2*6+2

 

2、代码

#include<stdio.h>

 

int main(){

      

       int a[4][8]={{0},{0},{8,15,8,5,16,9,14},{2,3,4,1,4,3,2,6}};

      

       for(int i=1;i>=0;i--){

              for(int j=0;j<=i+6;j++){

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

              }

       }

      

       for(int i=0;i<4;i++){

              for(int x=3-i;x>=0;x--){

                     printf("    ");

              }

              for(int j=0;j<5+i;j++){

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

              }

              puts("");

       }

       return 0;

}

 

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