蓝桥杯练习题库 2基础练习题含参考代码分析.docx

上传人:b****1 文档编号:3261168 上传时间:2023-05-05 格式:DOCX 页数:33 大小:22.29KB
下载 相关 举报
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第1页
第1页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第2页
第2页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第3页
第3页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第4页
第4页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第5页
第5页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第6页
第6页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第7页
第7页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第8页
第8页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第9页
第9页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第10页
第10页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第11页
第11页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第12页
第12页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第13页
第13页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第14页
第14页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第15页
第15页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第16页
第16页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第17页
第17页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第18页
第18页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第19页
第19页 / 共33页
蓝桥杯练习题库 2基础练习题含参考代码分析.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

蓝桥杯练习题库 2基础练习题含参考代码分析.docx

《蓝桥杯练习题库 2基础练习题含参考代码分析.docx》由会员分享,可在线阅读,更多相关《蓝桥杯练习题库 2基础练习题含参考代码分析.docx(33页珍藏版)》请在冰点文库上搜索。

蓝桥杯练习题库 2基础练习题含参考代码分析.docx

蓝桥杯练习题库2基础练习题含参考代码分析

基础练习数列排序 

时间限制:

1.0s 内存限制:

512.0MB

问题描述

  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。

1<=n<=200

输入格式

  第一行为一个整数n。

  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。

输出格式

  输出一行,按从小到大的顺序输出排序后的数列。

样例输入

5

83649

样例输出

34689

锦囊1

使用排序算法。

锦囊2

可以使用冒泡排序、排入排序等,也可以使用快速排序等更快的,还可以直接调用系统的函数。

#include

#include

voidPrint(int*data,intn)

{

inti;

for(i=0;i

{

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

}

printf("\n");

}

intSplit(int*data,intpre,intrear)

{

intvalue=data[pre];

while(pre

{

while(data[rear]>=value&&pre

data[pre]=data[rear];

while(data[pre]

data[rear]=data[pre];

}

data[pre]=value;

returnpre;

}

//快速排序

voidQuickSort(int*data,intpre,intrear)

{

if(pre

{

intmid=Split(data,pre,rear);

QuickSort(data,pre,mid-1);

QuickSort(data,mid+1,rear);

}

}

intmain()

{

inti;

intn;

int*data;

scanf("%d",&n);

data=(int*)malloc(sizeof(int)*n);

for(i=0;i

{

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

}

QuickSort(data,0,n-1);

Print(data,n);

return0;

}

基础练习十六进制转八进制 

时间限制:

1.0s 内存限制:

512.0MB

问题描述

  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式

  输入的第一行为一个正整数n(1<=n<=10)。

  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

  输出n行,每行为输入对应的八进制正整数。

注意

  输入的十六进制数不会有前导0,比如012A。

  输出的八进制数也不能有前导0。

样例输入

2

39

123ABC

样例输出

71

4435274

提示

  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

锦囊1

使用二进制。

锦囊2

先把十六进制转成二进制,每位十六进制正好转成4位二进制,然后再将二进制转成八进制,每三个二进制转成一个八进制。

#include

#include

#include

#defineMaxSize100000

voidsaveB(char*b,charc3,charc2,charc1,charc0,intstart)

{

b[start]=c3;

b[start+1]=c2;

b[start+2]=c1;

b[start+3]=c0;

}

inthtob(char*h,char*b)

{

inti,j;

inthl=strlen(h);

for(i=0;i

switch(h[i])

{

case'0':

{

saveB(b,'0','0','0','0',4*i);

break;

}

case'1':

{

saveB(b,'0','0','0','1',4*i);

break;

}

case'2':

{

saveB(b,'0','0','1','0',4*i);

break;

}

case'3':

{

saveB(b,'0','0','1','1',4*i);

break;

}

case'4':

{

saveB(b,'0','1','0','0',4*i);

break;

}

case'5':

{

saveB(b,'0','1','0','1',4*i);

break;

}

case'6':

{

saveB(b,'0','1','1','0',4*i);

break;

}

case'7':

{

saveB(b,'0','1','1','1',4*i);

break;

}

case'8':

{

saveB(b,'1','0','0','0',4*i);

break;

}

case'9':

{

saveB(b,'1','0','0','1',4*i);

break;

}

case'A':

{

saveB(b,'1','0','1','0',4*i);

break;

}

case'B':

{

saveB(b,'1','0','1','1',4*i);

break;

}

case'C':

{

saveB(b,'1','1','0','0',4*i);

break;

}

case'D':

{

saveB(b,'1','1','0','1',4*i);

break;

}

case'E':

{

saveB(b,'1','1','1','0',4*i);

break;

}

case'F':

{

saveB(b,'1','1','1','1',4*i);

break;

}

}

return4*hl;

}

intbtoo(char*b,char*o,intbl)

{

inti,j;

intol;

intvalue;

if(bl%3==0)

ol=bl/3;

else

ol=bl/3+1;

j=bl-1;

for(i=ol-1;i>=0;i--)

{

if(i>0)

o[i]=b[j]-48+(b[j-1]-48)*2+(b[j-2]-48)*4+48;

else

{

switch(j)

{

case2:

o[i]=b[j]-48+(b[j-1]-48)*2+(b[j-2]-48)*4+48;

break;

case1:

o[i]=b[j]-48+(b[j-1]-48)*2+48;

break;

case0:

o[i]=b[j];

break;

}

}

j=j-3;

}

returnol;

}

voidprintO(char*o,intol)

{

inti=0;

if(o[0]=='0')

i=1;

for(;i

{

printf("%c",o[i]);

}

printf("\n");

}

main()

{

charh[MaxSize];

charb[4*MaxSize];

charo[4*MaxSize/3+1];

intn,i,bl,ol;

scanf("%d",&n);

getchar();

for(i=0;i

{

gets(h);

bl=htob(h,b);

ol=btoo(b,o,bl);

printO(o,ol);

}

}

基础练习十六进制转十进制 

时间限制:

1.0s 内存限制:

512.0MB

问题描述

  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。

  注:

十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入

FFFF

样例输出

65535

锦囊1

按16进制展开。

锦囊2

按数位依次操作,每次将前面的乘16,再加上当前数位的值。

本题的C参考代码如下:

#include

#include

#include

intmain()

{

doublesum=0,x;

chara[8];

intlen,i=0;

gets(a);

len=strlen(a);

while(len)

{

if(a[len-1]>='A'&&a[len-1]<='F')

x=(a[len-1]-'7')*pow(16,i++);

else

x=(a[len-1]-'0')*pow(16,i++);

sum+=x;

len--;

}

printf("%.0lf",sum);

return0;

}

基础练习十进制转十六进制 

时间限制:

1.0s 内存限制:

512.0MB

问题描述

  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。

它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。

十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。

  给出一个非负整数,将它表示成十六进制的形式。

输入格式

  输入包含一个非负整数a,表示要转换的数。

0<=a<=2147483647

输出格式

  输出这个整数的16进制表示

样例输入

30

样例输出

1E

锦囊1

按除16取余倒数(也可使用格式输出)。

锦囊2

可以使用递归来处理,递归参数为要转换的数字,如果该数字大于等于16,则将递归处理该数整除16的值,然后再输出最后一位。

C/C++语言可以使用格式输出直接输出转换后的结果。

本题的C++参考代码如下:

1.#include

2.#include

3.using namespace std;

4.int main()

5.{

6.    int n;

7.    char s[100000];

8.    while(cin>>n)

9.    {

10.        int k=0;

11.        if(n==0)

12.        {

13.            cout<<0;

14.        }

15.        else

16.        {

17.           while(n!

=0)

18.           {

19.               if(n%16>=10)

20.               {

21.                   s[k++]='A'+n%16-10;

22.               }

23.               else

24.               {

25.                   s[k++]='0'+n%16;

26.               }

27.               n=n/16;

28.           }

29.           for(int i=k-1;i>=0;i--)

30.           {

31.               cout<

32.           }

33.        }

34.       cout<

35.    }

36.    return 0;

37.}

38.

本题的C参考代码如下:

#include

#include

chardata[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

//输出

voidPrint(char*num,intn)

{

inti;

for(i=n-1;i>=0;i--)printf("%c",num[i]);

printf("\0");

printf("\n");

}

//将十六进制数转换为十进制数

intTransform(char*num,longlongvalue)

{

intn=0;

while(value>=16)

{

num[n++]=data[value%16];

value/=16;

}

num[n++]=data[value%16];

returnn;

}

intmain()

{

longlongvalue;

charnum[10];

intn;

scanf("%I64d",&value);

n=Transform(num,value);

Print(num,n);

return0;

}

基础练习特殊回文数 

时间限制:

1.0s 内存限制:

512.0MB

问题描述

  123321是一个非常特殊的数,它从左边读和从右边读是一样的。

  输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。

输入格式

  输入一行,包含一个正整数n。

输出格式

  按从小到大的顺序输出满足条件的整数,每个整数占一行。

样例输入

52

样例输出

899998

989989

998899

数据规模和约定

  1<=n<=54。

锦囊1

枚举加判断。

锦囊2

枚举所有的五位和六位整数,先判断它们是否为回文数,然后再计算所有数字和,判断是否为n。

本题的C参考代码如下:

#include

intmain()

{

inta,b,c,d,e,f,t,all;

scanf("%d",&t);

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

for(b=0;b<10;b++)

for(c=0;c<10;c++)

for(d=0;d<10;d++)

for(e=0;e<10;e++)

{

if(a==e)

if(b==d)

{

all=a+b+c+d+e;

if(all==t)

printf("%d\n",a*10000+b*1000+c*100+d*10+e);

}

}

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

for(b=0;b<10;b++)

for(c=0;c<10;c++)

for(d=0;d<10;d++)

for(e=0;e<10;e++)

for(f=0;f<10;f++)

{

if(a==f)

if(b==e)

if(c==d)

{

all=a+b+c+d+e+f;

if(all==t)

printf("%d\n",a*100000+b*10000+c*1000+d*100+e*10+f);

}

}

return0;

}

基础练习回文数 

时间限制:

1.0s 内存限制:

512.0MB

问题描述

  1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。

输出格式

  按从小到大的顺序输出满足条件的四位十进制数。

锦囊1

枚举加判断。

锦囊2

枚举所有的四位整数,将它们的三位分别分离出来,然后判断是否第一位与第四位相同且第二位和第三位相同。

本题的C++参考代码如下:

1.#include

2.int main()

3.{

4.    for(int i1=1;i1<10;i1++)

5.    {

6.        for(int i2=0;i2<10;i2++)

7.        {

8.            for(int i3=0;i3<10;i3++)

9.            {

10.                for(int i4=0;i4<10;i4++)

11.                {

12.                    if(i1==i4 && i2==i3)

13.                    printf("%d%d%d%d\n",i1,i2,i3,i4);

14.                }

15.                

16.            }

17.        }

18.    }

19.    return 0;

20.}

本题的C参考代码如下:

#include

intmain()

{

inta,b,c,d,i;

for(i=1000;i<=9999;i++)

{

a=i/1000;

b=i/100%10;

c=i/10%10;

d=i%10;

if(a==d&&b==c)

printf("%d\n",i);

}

return0;

}

基础练习特殊的数字 

时间限制:

1.0s 内存限制:

512.0MB

问题描述

  153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。

编程求所有满足这种条件的三位十进制数。

输出格式

  按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。

#include

intmain()

{

inti,j,k,n;

for(n=100;n<1000;n++)

{

i=n/100;

j=n/10%10;

k=n%10;

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

printf("%d\n",n);

}

return0;

}

基础练习杨辉三角形 

时间限制:

1.0s 内存限制:

256.0MB

问题描述

杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

  

它的一个重要性质是:

三角形中的每个数字等于它两肩上的数字相加。

  

下面给出了杨辉三角形的前4行:

  

   1  

  11  

 121  

1331  

给出n,输出它的前n行。

输入格式

输入包含一个数n。

输出格式

输出杨辉三角形的前n行。

每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。

请不要在前面输出多余的空格。

样例输入

4

样例输出

1

11

121

1331

数据规模与约定

1<=n<=34。

锦囊1

使用二维数组。

锦囊2

使用一个二维数组来保存杨辉三角形,先将三角形计算出来,然后再输出。

本题的C++参考代码如下:

1.#include 

2.using namespace std;

3.const int MAXN = 40;

4.int n;

5.int a[MAXN][MAXN];

6.int main()

7.{

8.    cin >> n;

9.    a[0][0] = 1;

10.    for (int i = 0; i < n; ++i)

11.    {

12.        a[i][0] = a[i][i] = 1;

13.        for (int j = 1; j < i; ++j)

14.            a[i][j] = a[i-1][j-1] + a[i-1][j];

15.    }

16.    for (int i = 0; i < n; ++i)

17.    {

18.        for (int j = 0; j <= i; ++j)

19.            cout << a[i][j] << " ";

20.        cout << endl;

21.    }

22.    return 0;

23.}

本题的C参考代码如下:

#include

#defineMAXN40

intn;

inta[MAXN][MAXN];

intmain()

{

inti,j;

scanf("%d",&n);

a[0][0]=1;

for(i=0;i

{

a[i][0]=a[i][i]=1;

for(j=1;j

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

}

for(i=0;i

{

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

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

printf("\n");

}

return0;

}

基础练习查找整数 

时间限制:

1.0s 内存限制:

256

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2