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

目录

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。

示例代码

#include<iostream>
using namespace std;
int main() {
	int a, b,c;
	cin >> a >>b;
	cout << a + b;
}

2.数列排序

问题描述

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

输入格式

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

输出格式

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

样例输入

5
8 3 6 4 9

样例输出

3 4 6 8 9

示例代码

#include <iostream>
#include <algorithm>

using namespace std;

int main ()
{
	int n,a[200];
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	sort(a,a+n);
	for(int i=0;i<n;i++)
	{
		cout<<a[i]<<' ';
	}
	return 0;
}

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

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

3.十六进制转八进制

问题描述

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

输入格式

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

输出格式

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

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

样例输入

2
39
123ABC

样例输出

71
4435274

提示

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

示例代码

#include<iostream>
using namespace std;
struct Shiliu{
	int size ;
	string a;
};
int e[200][200000],f[200];
int c[200][400000];
struct Shiliu b[200];
int shiliuzhuanint(char d) {
	int temp;
	switch (d) {
	case '0':temp = 0; break;
	case '1':temp = 1; break;
	case '2':temp = 2; break;
	case '3':temp = 3; break;
	case '4':temp = 4; break;
	case '5':temp = 5; break;
	case '6':temp = 6; break;
	case '7':temp = 7; break;
	case '8':temp = 8; break;
	case '9':temp = 9; break;
	case 'A':temp = 10; break;
	case 'B':temp = 11; break;
	case 'C':temp = 12; break;
	case 'D':temp = 13; break;
	case 'E':temp = 14; break;
	case 'F':temp = 15; break;
	}
	return temp;
}
void shiliuzhuaner(struct Shiliu b[200], int i, int c[200][400000]) {
	int temp;
	for (int j = 0; j < b[i].size; j++) {
		temp = shiliuzhuanint(b[i].a[j]);
		c[i][j * 4] = temp / 8;
		c[i][j * 4 + 1] = temp % 8 / 4;
		c[i][j * 4 + 2] = temp % 4 / 2;
		c[i][j * 4 + 3] = temp % 2;
	}
}
void erzhaunba(int c[200][400000],int e[200][200000],int i, struct Shiliu b[200],int f[200]) {
	int temp,res,temp1=1;
	temp = b[i].size * 4;
	res = temp % 3;
	temp /= 3;
	if (res != 0) {
		temp++;
		f[i] = temp;
		for (int j = 0; j <temp; j++) {
			if (j == 0) {
				if (res == 1) {
					e[i][j] = c[i][j] * 1;
				}
				if (res == 2) {
					e[i][j] = c[i][j] * 2 + c[i][j + 1] * 1;
				}
			}
			else {
				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;
			}
		}
	}
	else {
		f[i] = temp;
		for (int j = 0; j < temp; j++) {
			e[i][j] = c[i][j * 3  ] * 4 + c[i][j  * 3  + 1] * 2 + c[i][j *3 + 2] * 1;
		}
	}
}
int main() {
	int n;
	cin >> n;
	
	for (int i = 0; i < n; i++) {
		cin >> b[i].a;
		b[i].size = b[i].a.length();
	}
	
	for (int i = 0; i < n; i++) {//十六进制转二进制已经完成
		shiliuzhuaner(b, i, c);
	}

	for (int i = 0; i < n; i++) {
		erzhaunba(c, e, i, b,f);
	}
	int flag = 1;
	for (int i = 0; i < n; i++) {
		flag = 1;
		for (int k = 0; k < f[i]; k++) {
			if (e[i][k] == 0 && flag == 1) {

			}
			else {
				cout << e[i][k];
				flag = 0;
			}
		}
		cout << endl;
	}
	return 0;
}

变量:

结构体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

示例代码

#include<iostream>
using namespace std;
int shiliuzhuanint(char d) {
	int temp=0;
	switch (d) {
	case '0':temp = 0; break;
	case '1':temp = 1; break;
	case '2':temp = 2; break;
	case '3':temp = 3; break;
	case '4':temp = 4; break;
	case '5':temp = 5; break;
	case '6':temp = 6; break;
	case '7':temp = 7; break;
	case '8':temp = 8; break;
	case '9':temp = 9; break;
	case 'A':temp = 10; break;
	case 'B':temp = 11; break;
	case 'C':temp = 12; break;
	case 'D':temp = 13; break;
	case 'E':temp = 14; break;
	case 'F':temp = 15; break;
	}
	return temp;
}
int main() {
	string a;
	cin >> a;
	int b, c[8];
	b = a.length();
	for (int i = 0; i < b; i++) {
		c[i] = shiliuzhuanint(a[i]);
	}
	unsigned long long int temp, res = 0;
	temp = 1;
	for (int i = b - 1; i >= 0; i--) {
		res = res + temp * c[i];
		temp =temp *  16;
	}
	cout << res;
	return 0;
}

变量:

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

 示例代码

#include<iostream>
using namespace std;
void shizhuanshiliu(unsigned long long int* d,char* temp) {
	switch (*d) {
	case  0:*temp='0'; break;
	case  1:*temp = '1'; break;
	case  2:*temp = '2'; break;
	case  3:*temp = '3'; break;
	case  4:*temp = '4'; break;
	case  5:*temp = '5'; break;
	case  6:*temp = '6'; break;
	case  7:*temp = '7'; break;
	case  8:*temp = '8'; break;
	case  9:*temp = '9'; break;
	case  10:*temp = 'A'; break;
	case  11:*temp = 'B'; break;
	case  12:*temp = 'C'; break;
	case  13:*temp = 'D'; break;
	case  14:*temp = 'E'; break;
	case  15:*temp = 'F'; break;
	}
}
int main() {
	unsigned long long int a;
	cin >> a;
	char c[100];
	unsigned long long int b[100], count=1, ans = 16;
	while (a / ans != 0) {
		count++;
		ans *= 16;
	}
	ans /= 16;
	for (int i = 0; i < count; i++) {
		b[i] = a / ans;
		shizhuanshiliu(&b[i], &c[i]);
		cout << c[i];
		a = a % ans;
		ans /= 16;
	}
	return 0;
}

 变量:

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

函数:

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

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

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

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值