蓝桥杯02

目录

闰年判断

回文数

杨辉三角

字母图形

拿金币


 

闰年判断

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define N 100

int arr[N];
int n;
int mem[N];
int st[N];

int main()
{
	scanf("%d",&n);
	if( (n % 4 == 0 && n % 100 != 0) || n % 400 == 0 )
		cout<<"yes";
	else cout<<"no";
	
	return 0;
}

回文数

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define N 100

int a[N];
int n;
int mem[N];
int st[N];

int func(int x) // 求逆序 
{
	int tmp = 0;
	while(x)
	{
		tmp = tmp * 10 + x % 10;
		x /= 10;	
	}
	return tmp;
}

void func_spe(int x,int &sum) // 特殊回文数,每位相加等于输入的数字 
{
	int tmp = 0;
	while(x)
	{
		sum += x % 10;
		x /= 10;	
	}
}

//回文数 
int main()
{
	cin>>n;
	for(int i = 10000; i <= 999999; i ++)
	{
		int sum = 0;
		func_spe(i,sum);
		if(sum == n && func(i) == i)
			cout<<i<<endl;
	}
	return 0;
}

打印杨辉三角

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define N 100

int arr[N];
int n;
int mem[N];
int st[N];

int dfs(int x)
{


}
int main()
{
	//定义一个9行9列的二维整型数组
    int data[35][35];

    int i = 0;
    int j = 0;
	cin>>n; 
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            //数组所有元素都赋值为1
            data[i][j] = 1;
        }
    }

    //dp
    for (i = 1; i < n; i++)
    {
        for (j = 1; j < i; j++)
        {
            data[i][j] = data[i-1][j] + data[i-1][j-1];
        }
    }

    //输出数组所有元素
    for (i = 0; i < n; i++)
    {
         for (j = 0; j <= i; j++)
         {
             printf("%d ", data[i][j]);
         }
         printf("\n");
    }
    return 0;
}

字母图形

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define N 100

int arr[N];
int n,m;
int mem[N];
int st[N];

int main()
{
    cin>>n>>m;

    for(int i=0;i<n;i++)
    {
         for(int j=0;j<m;j++)
         {
              printf("%c",'A'+abs(i-j)); 
         }
         printf("\n");
    } 
   return 0;
}

拿金币

问题描述

  有一个N x N的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以从一个格子走到它右边或下边的格子里。请问如何走才能拿到最多的金币。

输入格式

  第一行输入一个正整数n。
  以下n行描述该方格。金币数保证是不超过1000的正整数。

输出格式

  最多能拿金币数量。

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define N 1010

int a[N][N];
int n,m;
int mem[N];
int st[N];
int dp[N][N];
int dfs(int x)
{


}

/*
样例输入
3
1 3 3
2 2 2
3 1 2
样例输出
11
*/

int main()
{
	cin>>n;
	for(int i = 1;i <= n; i ++)
	{
		for(int j = 1;j <= n; j ++)
		{
			cin>>a[i][j];
			dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + a[i][j];
		}
	}

	printf("%d",dp[n][n]);
	return 0;
}

 

<think>好的,我现在需要帮助用户查找关于嵌入式蓝桥杯比赛中24C02芯片的相关资料或教程,特别是示例代码或实现方案。首先,我要回忆蓝桥杯嵌入式竞赛的常见开发板和资源。通常,他们使用的开发板可能基于STM32系列微控制器,比如STM32G4系列。板载的M24C02是一个I2C接口的EEPROM存储器,容量为2K位,也就是256字节。 接下来,我需要考虑用户可能需要的具体内容。用户提到的是示例代码和实现方案,所以应该包括I2C驱动程序的编写、M24C02的读写操作,以及可能的实际应用示例。根据引用[2]的内容,用户提供的参考资料提到了I2C通信和可编程电阻的操作,其中可能涉及M24C02的使用,因此可以引用该资料中的函数和方法。 首先,我需要确保回答符合用户给出的格式要求:使用中文,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,主要涉及代码和硬件操作。同时,需要生成相关问题,并在回答末尾添加引用标识。 接下来,我需要组织回答的结构。用户可能需要分步骤的指导,比如硬件连接、I2C初始化、读写函数实现、示例代码以及优化建议。每个部分需要简明扼要,并提供代码示例。此外,必须确保引用的资料正确,引用标识放在相关段落末尾。 然后,检查是否有遗漏的部分。例如,是否需要解释M24C02的地址格式,或者读写时的注意事项,比如页写入限制。另外,错误处理机制可能也是用户关心的,比如如何检测I2C通信是否成功。 在生成相关问题的时候,需要考虑用户可能的后续疑问,比如I2C地址如何确定、多字节读写的方法、数据持久化应用等。这些问题应覆盖基本操作和实际应用场景,帮助用户深入理解。 最后,确保所有提到的参考资料正确引用,特别是用户提供的引用[1]和[2],尽管引用[1]是关于快速排序的,但引用[2]直接涉及I2C和M24C02的操作,因此需要正确标注。 总结步骤: 1. 介绍M24C02的基本信息,引用相关资料。 2. 分步骤说明硬件连接、初始化、读写函数。 3. 提供示例代码,包括读写操作。 4. 给出优化建议和常见问题。 5. 生成相关问题。</think>根据蓝桥杯嵌入式竞赛中M24C02 EEPROM芯片的常用实现方案,以下是基于I2C通信的操作示例与关键代码分析: ### 1. M24C02基础特性 M24C02是2K位(256×8)串行EEPROM,支持标准I2C协议,工作电压1.8V-5.5V。器件地址格式为:$1010[A2][A1][A0]$,其中A2/A1/A0由硬件引脚电平决定[^2]。 ### 2. 硬件连接 开发板默认连接: - SDA:PB7 - SCL:PB6 器件地址:0xA0(默认引脚接地) ### 3. I2C初始化代码 ```c void MX_I2C1_Init(void) { hi2c1.Instance = I2C1; hi2c1.Init.Timing = 0x2000090E; // 400kHz模式 hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; HAL_I2C_Init(&hi2c1); } ``` ### 4. 单字节写入函数 ```c HAL_StatusTypeDef M24C02_WriteByte(uint16_t addr, uint8_t data) { uint8_t buffer[2] = {addr, data}; return HAL_I2C_Master_Transmit(&hi2c1, 0xA0, buffer, 2, 100); } ``` > 注意:地址范围$0x00$~$0xFF$,每次写入后需5ms延时等待写入完成[^2] ### 5. 多字节页写入 ```c HAL_StatusTypeDef M24C02_WritePage(uint16_t addr, uint8_t *data, uint8_t len) { if(len > 16) return HAL_ERROR; // 页大小为16字节 uint8_t buffer[17]; buffer[0] = addr; memcpy(&buffer[1], data, len); return HAL_I2C_Master_Transmit(&hi2c1, 0xA0, buffer, len+1, 100); } ``` ### 6. 随机读取实现 ```c HAL_StatusTypeDef M24C02_ReadByte(uint16_t addr, uint8_t *data) { HAL_I2C_Master_Transmit(&hi2c1, 0xA0, &addr, 1, 100); return HAL_I2C_Master_Receive(&hi2C1, 0xA0|0x01, data, 1, 100); } ``` ### 7. 典型应用场景 ```c // 保存系统参数示例 void SaveConfig(void) { uint8_t config[16] = {0x01,0xA5,0xCF...}; M24C02_WritePage(0x40, config, 16); HAL_Delay(5); } // 读取历史数据 void ReadHistory(uint8_t *buf) { for(int i=0; i<8; i++){ M24C02_ReadByte(0x80+i, &buf[i]); } } ``` ### 优化建议 1. 增加重试机制:I2C操作失败时自动重试3次 2. 使用DMA传输提升批量读写效率 3. 添加CRC校验保证数据可靠性
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值