NOIP(第04届)--1998--普及组--复赛--试题与答案(NA04)

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

中小学编程红宝书.zip


关键词:

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

      1998年、普及组、复赛,第4届。

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

 

NOIP(第04届)--1998--普及组--复赛--试题与答案(NB04) 拷贝.png


解析与答案:


1题:三位数

1、说明

A、试题类型:

       数字问题。

 

B、算法模型:

       无。

 

C、试题说明:   

三层循环挑出所有 3个不重复数组合,简明粗暴,并没有省去很多情况。

 

从123加到987的方法,多了两个数字重复的情况(没有算法数量级)。

 2、代码

#include<iostream>

using namespace std;

int main()

{

    int i,j,k,h,s;

    int a[10];

    for(i=123;i*3<=987;i++)

    {

              for(h=1;h<10;h++)

                     a[h]=0;

              a[i/100]=1;

              a[i/10%10]=1;

              a[i%10]=1;

              j=i*2;

              a[j/100]=1;

              a[j/10%10]=1;

              a[j%10]=1;

              k=i*3;

              a[k/100]=1;

              a[k/10%10]=1;

              a[k%10]=1;

              for(s=0,h=1;h<10;h++)

                     s=s+a[h];

              if(s==9)

                     cout<<"i="<<i<<" j="<<j<<" k="<<k<<endl;

    }

    return 0;

}

    

 

 

2题:阶乘

1、说明

A、试题类型:

       阶乘问题。

 

B、算法模型:

       大数阶乘,大数加法。

 

C、试题说明:

       先算出来阶乘,每算出来一次,就加上。

2、代码

#include <iostream>

#include <cstring>

using namespace std;

int main()

{

       int arr[10000] = {0}, a, brr[10000] = {0};

       while(cin >> a)

       {

              int count = 1, count1 = 1; ///count为阶乘数组位数,count1为结果数组位数;

              memset(arr, 0, sizeof(arr));

              memset(brr, 0, sizeof(brr));

              arr[0] = 1;

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

              {

                     ///阶乘

                     for(int j = 0; j < count; j++)

                     {

                            arr[j] *= i;

                     }

                     for(int j = 0; j < count; j++)

                     {

                            if(arr[j] >= 10)

                            {

                                   arr[j + 1] += arr[j] / 10;

                                   arr[j] %= 10;

                            }

                     }

                     while(arr[count])

                     {

                            arr[count + 1] += arr[count] / 10;

                            arr[count] %= 10;

                            count++;

                     }

                    

                    

                     ///plus

                     count1 = count;

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

                     {

                            brr[i] += arr[i];

                            if(brr[i] >= 10)

                            {

                                   brr[i + 1] += brr[i] / 10;

                                   brr[i] %= 10;

                            }

                     }

                     while(brr[count1])

                     {

                            brr[count1 + 1] += brr[count1] / 10;

                            brr[count1] %= 10;

                            count1++;

                     }

              }

             

              for(int i = count1 + 1; i >= 0; i--) ///输出

              {

                     if(brr[i] != 0)

                     {

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

                                   cout << brr[j];

                            cout << endl;

                            break;

                     }

              }

       }

       return 0;

}

 

 

 

3题:正整数与二次幂

1、说明

A、试题类型:

       二次幂。

 

B、算法模型:

       无。

 

C、试题说明:

       一个数转成二的幂次方步骤:

 

先把数转成二进制,例如3可以转为11,按权值展开可得2+2(0);

然后再用递归再把次方数转二进制,以此类推。

2、代码

#include<iostream>

#include<cstdio>

using namespace std;

 

void f(int num)

{  

       int b[100000]={},c=0;

       bool check=false;

       if(num==0)

       {

              cout<<0;

              return;

       }

 

       if(num==1)

       {

              cout<<"2(0)";

              return;

       }

 

       if(num==2)

       {

              cout<<"2";

              return;

       }

 

       while(num!=0)

       {

              b[c]=num%2;

              num/=2;

              c++;

       }

 

       for(register int i=c-1;i>=0;--i)

       {

              if(b[i]==1)

              {

                     if(!check)

                     {

                            if(i==1)

                            {

                                   cout<<"2";

                                   check=true;

                                   continue;

                            }

                            cout<<"2(";

                            f(i);

                            cout<<")";

                            check=true;

                     }

                     else

                     {

                            if(i==1)

                            {

                                   cout<<"+2";

                                   continue;

                            }

                            cout<<"+2(";

                            f(i);

                            cout<<")";

                     }

              }

       }

}

 

int main()

{

       int x=0;

       cin>>x;

       f(x);

}

   

 


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