蓝桥杯基础练习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


提示:以下是本篇文章正文内容,下面案例可供参考

一、十六进制转八进制

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
代码:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
void print(int a[], int n)
{
	for (int i = 0; i <n; i++)
		printf("%d\n", a[i]);
}
int save(int a[],int n)//保存转化好的值,方便后续输出
{
	int ans=0;
	for (int i = 0; i < n; i++)
	{
		ans += a[i] * pow(10, i );
	}
	return ans;
}
int turn_string_into_num(char c[], int a[])//输入的数字可能很大,用long long都存不下,所以用字符数组保存,再转变成数组
{
	int n = strlen(c);
	for (int i = 0; i < n; i++)
	{
		if (c[i] == 'A' || c[i] == 'B' || c[i] == 'C' || c[i] == 'D' || c[i] == 'E' || c[i] == 'F' || c[i] == 'G')
		{
			a[i] = c[i] - '0' - 7;
		}
		else
			a[i] = c[i] - '0';
	}
	return n;
}
void turn_sequence(int a[],int b[], int n)//进行十六进制转化成十进制运算时,先把数组逆序方便运算
{
	for (int i = n - 1,j=0; i >= 0; i--,j++)
	{
		b[j] = a[i];
	}

}
int turn_16_to_10(int b[], int n)
{
	int num = 0;
	for (int i = 0; i < n; i++)
	{
		num += b[i] <<(4*i);//关键步骤:b[i]*2的(4i)次方
	}
	return num;
}
int turn_10_to_8(int ans10,int d[])
{
	int a[1000];
	int num = 0;
	int n = ans10;
	while (n != 0)
	{
		a[num] = n % 8;
		num++;
		n = n / 8;
	}
	turn_sequence(a, d, num );
	return save(a, num);
}
int main()
{
	int ans[1000];
	int d[1000];
	int b[1000];
	int a[1000];
	char c[1000];
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%s", &c);
		int num=turn_string_into_num(c, a);
		turn_sequence(a,b,num);
		int ans10 = turn_16_to_10(b, num);
		ans[i]=turn_10_to_8(ans10, d);
	}
	print(ans, n);
	/*2
	39
	123ABC*/
	return 0;
}

二、十进制转十六进制

在这里插入图片描述

要点:
1.字符数组要记得初始化
2.注意0的特殊情况(不进入循环)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;
int turn_10_to_16(int ans10, char s[])
{
	int num = 0;
	int n = ans10;
	if (n == 0)
	{
		s[num] = '0';
		num++;
	} //注意0的特殊情况
	else
	{
		while (n != 0)
		{
			int c;
			c = n % 16;
			if (c > 9)
			{
				s[num] = c + 55;//把数字转化成大写字母
				num++;
			}
			else
			{
				s[num] = c + 48;//把数字转化成字符串中的数字
				num++;
			}
			n = n / 16;
		}
	}
	return num;
}
int main()
{
	char s[1000]={0};//要先初始化
	int n;
	scanf("%d", &n);
	int num=turn_10_to_16(n, s);
	for (int i = num - 1; i >= 0; i--)
		printf("%c", s[i]);
	return 0;
}

三、特殊回文数

要点:第一位数字不能为0,其他位可以
1

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;
void five(int n)
{
	for (int i = 1; i <= 9; i++)//第一个数字不能为0,第二,第三个数字都能为0。
	{
		for (int j = 0; j <= 9; j++)
		{
			for (int k = 0; k <= 9; k++)
			{
				if (2*(i+j)+k==n)
				{
					printf("%d%d%d%d%d", i, j, k, j, i);
					printf("\n");
				}
			}
		}
	}
}
void six(int n)
{
	for (int i = 1; i <= 9; i++)
	{
		for (int j = 0; j <= 9; j++)
		{
			for (int k = 0; k <= 9; k++)
			{
				if ((i+j+k)*2 == n)
				{
					printf("%d%d%d%d%d%d", i, j, k,k, j, i);
					printf("\n");
				}
			}
		}
	}
}
int main()
{
	int n;
	scanf("%d", &n);
	five(n);
	six(n);
	return 0;
}

四、数列特征

在这里插入图片描述
在这里插入图片描述
要点:1.每个数的绝对值都小于10000,所以min=-10001,max=10001
2.注意只有一个元素的情况,最大值和最小值都是那个元素,要特别处理,不然输出默认的min和max的值

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int sum = 0;
	int max = -10001, min = 10001;//每个数的绝对值都小于10000。
	int a[10000];
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		int x;
		scanf("%d", &x);
		a[i] = x;
		sum += a[i];
	}
	for (int i = 1; i <= n; i++)
	{
		if (a[i] > max)
			max = a[i];
	}
	if (n == 1)//注意只有一个元素的情况,最大值最小值都是那个元素
		printf("%d\n", a[1]);
	else
		printf("%d\n", max);
	for (int i = 1; i <= n; i++)
	{
		if (a[i] < min)
			min = a[i];
	}
	if (n == 1)
		printf("%d\n", a[1]);
	else
		printf("%d\n", min);
	printf("%d", sum);
	/*5
	1 3 -2 4 5*/
	return 0;
}

五、字母图形

在这里插入图片描述
要点:
1.画图分析思路
2.先输出A及其A前面的,再输出A及其A后面的

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;
void print(char a[], char b[],int i,int m)
{
	int n = i;
	for (int i = 1; i <= n&&i<=m; i++)//i还要比列数少,不然超出列数范围
	{
		printf("%c", b[i]);
	
	}
	for (int j = n + 1; j <= m; j++)
	{
		printf("%c", a[j]);
	}
	printf("\n");
}
int main()
{
	int n, m;
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= m; i++)
		printf("%c", 'A' + (i - 1));
	printf("\n");//先输出第一行
	for (int i = 1; i <= n - 1; i++)
	{
		char b[100] = { 0 };
		char a[100]={0};
		for (int j = i + 1,p=0; j <= m; j++,p++)
		{
			a[j] = 'A' + p;
		}//输出A及其A后面的
		for (int k = i,p=1; k >= 1; k--,p++)
		{
			b[k] = 'A' + p;
		}//输出A及其A前面的
		print(a, b, i, m);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值