蓝桥基础训练题.docx
《蓝桥基础训练题.docx》由会员分享,可在线阅读,更多相关《蓝桥基础训练题.docx(61页珍藏版)》请在冰豆网上搜索。
![蓝桥基础训练题.docx](https://file1.bdocx.com/fileroot1/2023-2/6/d700a8d9-9688-4536-a5ee-26fa022ebef4/d700a8d9-9688-4536-a5ee-26fa022ebef41.gif)
蓝桥基础训练题
1.问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。
1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
83649
样例输出
34689
1.#include
2.#include
3.void Print(int *data,int n)
4.{
5. int i;
6. for(i=0;i7. {
8. printf("%d ",data[i]);
9. }
10. printf("\n");
11.}
12.
13.int Split(int *data,int pre,int rear)
14.{
15. int value=data[pre];
16. while(pre17. {
18. while(data[rear]>=value && pre19. data[pre]=data[rear];
20. while(data[pre]21. data[rear]=data[pre];
22. }
23. data[pre]=value;
24. return pre;
25.}
26.
27.//快速排序
28.void QuickSort(int *data,int pre,int rear)
29.{
30. if(pre31. {
32. int mid=Split(data,pre,rear);
33. QuickSort(data,pre,mid-1);
34. QuickSort(data,mid+1,rear);
35. }
36.}
37.
38.int main()
39.{
40. int i;
41. int n;
42. int *data;
43. scanf("%d",&n);
44. data=(int *)malloc(sizeof(int)*n);
45. for(i=0;i46. {
47. scanf("%d",&data[i]);
48. }
49. QuickSort(data,0,n-1);
50. Print(data,n);
51. return 0;
52.}
2.问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n(1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
1.#include
2.#include
3.#include
4.
5.#define MaxSize 100000
6.
7.void saveB(char *b,char c3,char c2,char c1,char c0,int start)
8.{
9. b[start]=c3;
10. b[start+1]=c2;
11. b[start+2]=c1;
12. b[start+3]=c0;
13.}
14.int htob(char *h,char *b)
15.{
16. int i,j;
17. int hl=strlen(h);
18. for(i=0;i19. switch(h[i])
20. {
21. case '0':
22. {
23. saveB(b,'0','0','0','0',4*i);
24. break;
25. }
26. case '1':
27. {
28. saveB(b,'0','0','0','1',4*i);
29. break;
30. }
31. case '2':
32. {
33. saveB(b,'0','0','1','0',4*i);
34. break;
35. }
36. case '3':
37. {
38. saveB(b,'0','0','1','1',4*i);
39. break;
40. }
41. case '4':
42. {
43. saveB(b,'0','1','0','0',4*i);
44. break;
45. }
46. case '5':
47. {
48. saveB(b,'0','1','0','1',4*i);
49. break;
50. }
51. case '6':
52. {
53. saveB(b,'0','1','1','0',4*i);
54. break;
55. }
56. case '7':
57. {
58. saveB(b,'0','1','1','1',4*i);
59. break;
60. }
61. case '8':
62. {
63. saveB(b,'1','0','0','0',4*i);
64. break;
65. }
66. case '9':
67. {
68. saveB(b,'1','0','0','1',4*i);
69. break;
70. }
71. case 'A':
72. {
73. saveB(b,'1','0','1','0',4*i);
74. break;
75. }
76. case 'B':
77. {
78. saveB(b,'1','0','1','1',4*i);
79. break;
80. }
81. case 'C':
82. {
83. saveB(b,'1','1','0','0',4*i);
84. break;
85. }
86. case 'D':
87. {
88. saveB(b,'1','1','0','1',4*i);
89. break;
90. }
91. case 'E':
92. {
93. saveB(b,'1','1','1','0',4*i);
94. break;
95. }
96. case 'F':
97. {
98. saveB(b,'1','1','1','1',4*i);
99. break;
100. }
101. }
102. return 4*hl;
103.}
104.int btoo(char *b,char *o,int bl)
105.{
106. int i,j;
107. int ol;
108. int value;
109. if(bl%3==0)
110. ol=bl/3;
111. else
112. ol=bl/3+1;
113. j=bl-1;
114. for(i=ol-1;i>=0;i--)
115. {
116. if(i>0)
117. o[i]=b[j]-48+(b[j-1]-48)*2+(b[j-2]-48)*4+48;
118. else
119. {
120. switch(j)
121. {
122. case 2:
123. o[i]=b[j]-48+(b[j-1]-48)*2+(b[j-2]-48)*4+48;
124. break;
125. case 1:
126. o[i]=b[j]-48+(b[j-1]-48)*2+48;
127. break;
128. case 0:
129. o[i]=b[j];
130. break;
131. }
132.
133. }
134. j=j-3;
135. }
136. return ol;
137.}
138.void printO(char *o,int ol)
139.{
140. int i=0;
141. if(o[0]=='0')
142. i=1;
143. for(;i
144. {
145. printf("%c",o[i]);
146. }
147. printf("\n");
148.}
149.main()
150.{
151. char h[MaxSize];
152. char b[4*MaxSize];
153. char o[4*MaxSize/3+1];
154. int n,i,bl,ol;
155. scanf("%d",&n);
156. getchar();
157. for(i=0;i158. {
159. gets(h);
160. bl=htob(h,b);
161. ol=btoo(b,o,bl);
162.
163. printO(o,ol);
164. }
165.}
3.问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:
十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
1.#include
2.#include
3.#include
4.int main()
5.{
6. double sum=0,x;
7. char a[8];
8. int len,i=0;
9. gets(a);
10. len=strlen(a);
11. while(len)
12. {
13. if(a[len-1]>='A'&&a[len-1]<='F')
14. x=(a[len-1]-'7')*pow(16,i++);
15. else
16. x=(a[len-1]-'0')*pow(16,i++);
17. sum+=x;
18. len--;
19. }
20. printf("%.0lf",sum);
21.
22. return 0;
23.
24. }
4.问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。
它有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.#include
2.#include
3.char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
4.
5.//输出
6.void Print(char *num,int n)
7.{
8. int i;
9. for(i=n-1;i>=0;i--) printf("%c",num[i]);
10. printf("\0");
11. printf("\n");
12.}
13.
14.//将十六进制数转换为十进制数
15.int Transform(char *num,long long value)
16.{
17. int n=0;
18. while(value>=16)
19. {
20. num[n++]=data[value%16];
21. value/=16;
22. }
23. num[n++]=data[value%16];
24. return n;
25.}
26.
27.int main()
28.{
29. long long value;
30. char num[10];
31. int n;
32. scanf("%I64d",&value);
33. n=Transform(num,value);
34. Print(num,n);
35. return 0;
36.}
5.问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
1.#include
2.int main()
3.{
4. int a,b,c,d,e,f,t,all;
5. scanf("%d",&t);
6. for(a=1;a<10;a++)
7. for(b=0;b<10;b++)
8. for(c=0;c<10;c++)
9. for(d=0;d<10;d++)
10. for(e=0;e<10;e++)
11. {
12. if(a==e)
13. if(b==d)
14. {
15. all=a+b+c+d+e;
16. if(all==t)
17. printf("%d\n",a*10000+b*1000+c*100+d*10+e);
18. }
19. }
20. for(a=1;a<10;a++)
21. for(b=0;b<10;b++)
22. for(c=0;c<10;c++)
23. for(d=0;d<10;d++)
24. for(e=0;e<10;e++)
25. for(f=0;f<10;f++)
26. {
27. if(a==f)
28. if(b==e)
29. if(c==d)
30. {
31. all=a+b+c+d+e+f;
32. if(all==t)
33. printf("%d\n",a*100000+b*10000+c*1000+d*100+e*10+f);
34. }
35. }
36.
37. return 0;
38.}
6.问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
1.#include
2.int main()
3.{
4. int a,b,c,d,i;
5. for(i=1000;i<=9999;i++)
6. {
7. a=i/1000;
8. b=i/100%10;
9. c=i/10%10;
10. d=i%10;
11. if(a==d&&b==c)
12. printf("%d\n",i);
13. }
14.return 0;
15.}
7.问题描述
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。
编程求所有满足这种条件的三位十进制数。
输出格式
按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。
1.#include
2.int main()
3.{
4. int i,j,k,n;
5. for(n=100;n<1000;n++)
6. {
7. i=n/100;
8. j=n/10%10;
9.