NOIP(第05届)--1999--提高组--复赛--试题与答案(NA05)

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

中小学编程红宝书.zip

关键词:

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


 

第1题:Cantor表

1、说明

A、试题类型:

       数字模型问题。

 

B、算法模型:

       奇偶两重推导。

 

C、试题说明:

找规律:

第1层:1/1

第2层:1/2 2/1

第3层:3/1 2/2 1/3

第4层:1/4 2/3 3/2 4/1

第5层:5/1 4/2 3/3 2/4 1/5

 

因为各层分数的分子分母之和比层数大1。

偶数层即(w)+ (h+1-w)=h+1。

奇数层即(h+1-w)+ (w)=h+1。

2、代码

#include<stdio.h>

 

int main()

{

       int h=1, w;

       scanf("%d",&w);

 

       while (w > h)//循环,得出层数(高度)

       {

              w -= h;

              h++;

       }

      

       if (h % 2 == 0)//如果是偶数层,分子递增,分母递减,得出答案

       {

              printf("%d/%d",w,h+1-w);

       }

      

       else//如果是奇数层,分子递减,分母递增,得出答案

       {

              printf("%d/%d",h+1-w,w);

       }

}

 

第2题:回文数

1、说明

A、试题类型:

       数的问题。

 

B、算法模型:

       回文考点。

 

C、试题说明:

       数学与逻辑的结合。

2、代码

#include <stdio.h>

#include <stdlib.h>

#define N 10000

#define K 20

 

long tran(long num[],long B,long n)//十进制改为其它进制

{

    long i=0,j,temp;

 

    do

    {

        num[i++]=n%B;

    }while((n/=B)!=0);

 

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

    {

        temp=num[j];

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

        num[i-1-j]=temp;

    }

 

    return i;

}

 

int judge(long num[],long len)//判断是否是回文数

{

    long i,flag=1;

 

    for(i=0; i<len/2; i++)

    {

        if(num[i]!=num[len-i-1])

            flag=0;

    }

    return flag;

}

 

int main()

{

    long B,num1[N],i,len1,t,flag,n;

    scanf("%d",&t);

 

    while(t--)

    {

        flag=0;

        scanf("%ld",&n);

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

        {

            len1=tran(num1,i,n);

            if(judge(num1,len1))

                flag=1;

        }

 

        if(flag==1)

            printf("Yes\n");

        else

            printf("No\n");

    }

 

    return 0;

}

第3题:旅行家的预算

1、说明

A、试题类型:

       逻辑推理。

 

B、算法模型:

       公式推导。

 

C、试题说明:

       算法训练。

 

 

2、代码

#include <iostream>

#include <string>

using namespace std;

 

int main()

{

       double D1,C,D2,P;

       int N;

       cin>>D1>>C>>D2>>P>>N;

      

       double * value = new double[N+1];//记录第i个加油站的价钱

       double * over = new double[N+1]();//记录到第i个加油站的时候还可以走多少公里

       double * way = new double[N+2];//记录第i个点离出发点的距离

      

       //初始化

       value[0] = P;

       way[0] = 0;

       double MAX = C*D2;//记录能行驶距离

       bool flag = false;//判断是否无解

      

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

       {

              cin>>way[i]>>value[i];

              if(way[i] - way[i-1]>MAX)

              {

                     flag = true;

              }

       }

      

       if(flag)

       {

              cout<<"No Solution"<<endl;

              return 0;

       }

      

       way[N+1] = D1;//终点是最后一个加油站

       int i = 0;//记录当前到达的加油站

       int j = 1;// 记录向后找到的比自己便宜的加油站的编号

       double cost = 0;//记录费用

       while(i!=N+1)

       {//直到终点才停止

              double s = 0;//记录到比自己便宜的加油站的距离

              while((s<=MAX)&&(j<=N)&&(value[i] <= value[j]))

              {//查找比自己便宜的加油站

                     j++;

                     s = s + way[j] - way[j-1];

              }

             

              if(s<=MAX)

              {//是否可以一步j加油站或不中途不加油到J

                     if(over[i]>=way[j]-way[i])

                     {//在i点加不加油

                            over[j] = over[i]-way[j]+way[i];//在i点不加油因为够油到j点

                     }

                     else

                     {//在i点加油到刚刚好到j点

                            cost = cost + (way[j]-way[i]-over[i])/D2 * value[i];

                            over[j] = 0;//到j点时刚刚没油

                     }

              }

              else

              {//到不lJ或没有找到比当前便宜的点,即在当前加满油

                     cost = cost + (MAX - over[i])/D2 * value[i];

                     j = i+1;

                     over[j] = MAX - (way[j] - way[i]);//记录到下一个加油站的时候还可以走多远

              }

              i = j;

       }

      

       printf("%.2f",cost);

      

       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