当前位置:   article > 正文

蓝桥杯基础练习合集一(C语言) 1.A+B问题2.数列排序3.十六进制转八进制4.十六进制转十进制5.十进制转十六进制_蓝桥杯试题 c基础练习 a+b问题

蓝桥杯试题 c基础练习 a+b问题

目录

1.A+B问题

2.数列排序

3.十六进制转八进制

4.十六进制转十进制

5.十进制转十六进制


1.A+B问题

问题描述

输入A、B,输出A+B。

输入格式

输入的第一行包括两个整数,由空格分隔,分别表示A、B。

输出格式

输出一行,包括一个整数,表示A+B的值。

样例输入

12 45

样例输出

57

数据规模与约定

-10000 <= A, B <= 10000。

示例代码

  1. #include<iostream>
  2. using namespace std;
  3. int main() {
  4. int a, b,c;
  5. cin >> a >>b;
  6. cout << a + b;
  7. }

2.数列排序

问题描述

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

输入格式

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

输出格式

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

样例输入

5
8 3 6 4 9

样例输出

3 4 6 8 9

示例代码

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. int main ()
  5. {
  6. int n,a[200];
  7. cin>>n;
  8. for(int i=0;i<n;i++)
  9. {
  10. cin>>a[i];
  11. }
  12. sort(a,a+n);
  13. for(int i=0;i<n;i++)
  14. {
  15. cout<<a[i]<<' ';
  16. }
  17. return 0;
  18. }

利用sort函数可以快速解决数组排序问题,对应的头文件为algorithm

sort函数的第一个参数为需要排序的数的首地址(不一定是数组首地址),第二个参数为末地址。

3.十六进制转八进制

问题描述

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

输入格式

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

输出格式

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

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

样例输入

2
39
123ABC

样例输出

71
4435274

提示

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

示例代码

  1. #include<iostream>
  2. using namespace std;
  3. struct Shiliu{
  4. int size ;
  5. string a;
  6. };
  7. int e[200][200000],f[200];
  8. int c[200][400000];
  9. struct Shiliu b[200];
  10. int shiliuzhuanint(char d) {
  11. int temp;
  12. switch (d) {
  13. case '0':temp = 0; break;
  14. case '1':temp = 1; break;
  15. case '2':temp = 2; break;
  16. case '3':temp = 3; break;
  17. case '4':temp = 4; break;
  18. case '5':temp = 5; break;
  19. case '6':temp = 6; break;
  20. case '7':temp = 7; break;
  21. case '8':temp = 8; break;
  22. case '9':temp = 9; break;
  23. case 'A':temp = 10; break;
  24. case 'B':temp = 11; break;
  25. case 'C':temp = 12; break;
  26. case 'D':temp = 13; break;
  27. case 'E':temp = 14; break;
  28. case 'F':temp = 15; break;
  29. }
  30. return temp;
  31. }
  32. void shiliuzhuaner(struct Shiliu b[200], int i, int c[200][400000]) {
  33. int temp;
  34. for (int j = 0; j < b[i].size; j++) {
  35. temp = shiliuzhuanint(b[i].a[j]);
  36. c[i][j * 4] = temp / 8;
  37. c[i][j * 4 + 1] = temp % 8 / 4;
  38. c[i][j * 4 + 2] = temp % 4 / 2;
  39. c[i][j * 4 + 3] = temp % 2;
  40. }
  41. }
  42. void erzhaunba(int c[200][400000],int e[200][200000],int i, struct Shiliu b[200],int f[200]) {
  43. int temp,res,temp1=1;
  44. temp = b[i].size * 4;
  45. res = temp % 3;
  46. temp /= 3;
  47. if (res != 0) {
  48. temp++;
  49. f[i] = temp;
  50. for (int j = 0; j <temp; j++) {
  51. if (j == 0) {
  52. if (res == 1) {
  53. e[i][j] = c[i][j] * 1;
  54. }
  55. if (res == 2) {
  56. e[i][j] = c[i][j] * 2 + c[i][j + 1] * 1;
  57. }
  58. }
  59. else {
  60. e[i][j] = c[i][(j - 1) * 3 + res] * 4 + c[i][(j - 1) * 3 + res + 1] * 2 + c[i][(j - 1) * 3 + res + 2] * 1;
  61. }
  62. }
  63. }
  64. else {
  65. f[i] = temp;
  66. for (int j = 0; j < temp; j++) {
  67. e[i][j] = c[i][j * 3 ] * 4 + c[i][j * 3 + 1] * 2 + c[i][j *3 + 2] * 1;
  68. }
  69. }
  70. }
  71. int main() {
  72. int n;
  73. cin >> n;
  74. for (int i = 0; i < n; i++) {
  75. cin >> b[i].a;
  76. b[i].size = b[i].a.length();
  77. }
  78. for (int i = 0; i < n; i++) {//十六进制转二进制已经完成
  79. shiliuzhuaner(b, i, c);
  80. }
  81. for (int i = 0; i < n; i++) {
  82. erzhaunba(c, e, i, b,f);
  83. }
  84. int flag = 1;
  85. for (int i = 0; i < n; i++) {
  86. flag = 1;
  87. for (int k = 0; k < f[i]; k++) {
  88. if (e[i][k] == 0 && flag == 1) {
  89. }
  90. else {
  91. cout << e[i][k];
  92. flag = 0;
  93. }
  94. }
  95. cout << endl;
  96. }
  97. return 0;
  98. }

变量:

结构体Shiliu的size表示该字符串的长度,a表示输入的字符串

 数组c存储2进制,e存储八进制,f存储e的元素数目

函数:

 shiliuzhuanint函数是把表示16进制数的字符转化为10进制整型数并返回

shiliuzhuaner函数是将16进制字符转化为2进制整型数并储存在数组c里,一个16进制数可以转变为4个二进制数

erzhuanba函数是将2进制转化为8进制,并存储八进制数的数目,假设输入n个字符串,则共4n个二进制数,而每个八进制数需要3个二进制数,此外应该从二进制数组的最后三个元素开始构成八进制数,从后往前,如果剩下的二进制数不足3个,从后往前,按乘1,2来计算

主函数中flag的作用是是否找到非0前导,如果找到,后续的0都能输出,否则没有一个0可以输出,当然无论如何非0的数都能输出。

至于为什么使用那么多全局变量,是因为全局变量占用的是堆,如果在主函数定义,就会占用栈,栈的空间不够用,但堆的地方够用

4.十六进制转十进制

问题描述

从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入

FFFF

样例输出

65535

示例代码

  1. #include<iostream>
  2. using namespace std;
  3. int shiliuzhuanint(char d) {
  4. int temp=0;
  5. switch (d) {
  6. case '0':temp = 0; break;
  7. case '1':temp = 1; break;
  8. case '2':temp = 2; break;
  9. case '3':temp = 3; break;
  10. case '4':temp = 4; break;
  11. case '5':temp = 5; break;
  12. case '6':temp = 6; break;
  13. case '7':temp = 7; break;
  14. case '8':temp = 8; break;
  15. case '9':temp = 9; break;
  16. case 'A':temp = 10; break;
  17. case 'B':temp = 11; break;
  18. case 'C':temp = 12; break;
  19. case 'D':temp = 13; break;
  20. case 'E':temp = 14; break;
  21. case 'F':temp = 15; break;
  22. }
  23. return temp;
  24. }
  25. int main() {
  26. string a;
  27. cin >> a;
  28. int b, c[8];
  29. b = a.length();
  30. for (int i = 0; i < b; i++) {
  31. c[i] = shiliuzhuanint(a[i]);
  32. }
  33. unsigned long long int temp, res = 0;
  34. temp = 1;
  35. for (int i = b - 1; i >= 0; i--) {
  36. res = res + temp * c[i];
  37. temp =temp * 16;
  38. }
  39. cout << res;
  40. return 0;
  41. }

变量:

a是输入的十六进制字符串,b是存储十六进制字符串的长度,数组c用来存储a对应的每个位置上转变后的十进制数字 。

函数:

shiliuzhuanint函数就是将输入的十六进制字符转化为十进制。

主函数通过累加累乘,把十进制数组整合起来输出。

5.十进制转十六进制

问题描述

十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有            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<iostream>
  2. using namespace std;
  3. void shizhuanshiliu(unsigned long long int* d,char* temp) {
  4. switch (*d) {
  5. case 0:*temp='0'; break;
  6. case 1:*temp = '1'; break;
  7. case 2:*temp = '2'; break;
  8. case 3:*temp = '3'; break;
  9. case 4:*temp = '4'; break;
  10. case 5:*temp = '5'; break;
  11. case 6:*temp = '6'; break;
  12. case 7:*temp = '7'; break;
  13. case 8:*temp = '8'; break;
  14. case 9:*temp = '9'; break;
  15. case 10:*temp = 'A'; break;
  16. case 11:*temp = 'B'; break;
  17. case 12:*temp = 'C'; break;
  18. case 13:*temp = 'D'; break;
  19. case 14:*temp = 'E'; break;
  20. case 15:*temp = 'F'; break;
  21. }
  22. }
  23. int main() {
  24. unsigned long long int a;
  25. cin >> a;
  26. char c[100];
  27. unsigned long long int b[100], count=1, ans = 16;
  28. while (a / ans != 0) {
  29. count++;
  30. ans *= 16;
  31. }
  32. ans /= 16;
  33. for (int i = 0; i < count; i++) {
  34. b[i] = a / ans;
  35. shizhuanshiliu(&b[i], &c[i]);
  36. cout << c[i];
  37. a = a % ans;
  38. ans /= 16;
  39. }
  40. return 0;
  41. }

 变量:

a是输入的十进制数字,b是存储十进制转化为十六进制的各个位置上的整型数字,数组c是存储b的字符形式

函数:

shizhuanshiliu函数是把十进制数转变为十六进制数

主函数的while循环是计算a转化为16进制数后的位数,for循环则是将16进制数整合10进制数相加,并输出

蓝桥杯基础习题合集二
蓝桥杯基础习题合集三

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/594980
推荐阅读
相关标签
  

闽ICP备14008679号