蓝桥基础训练题.docx
- 文档编号:9861540
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:61
- 大小:37.62KB
蓝桥基础训练题.docx
《蓝桥基础训练题.docx》由会员分享,可在线阅读,更多相关《蓝桥基础训练题.docx(61页珍藏版)》请在冰豆网上搜索。
蓝桥基础训练题
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;i 7. { 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(pre 17. { 18. while(data[rear]>=value && pre 19. 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(pre 31. { 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;i 46. { 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;i 19. 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;i 158. { 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.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 桥基 训练
![提示](https://static.bdocx.com/images/bang_tan.gif)