HDUOJ_2700_Parity

Parity

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4020    Accepted Submission(s): 3020


Problem Description
A bit string has odd parity if the number of 1's is odd. A bit string has even parity if the number of 1's is even.Zero is considered to be an even number, so a bit string with no 1's has even parity. Note that the number of
0's does not affect the parity of a bit string.
 

Input
The input consists of one or more strings, each on a line by itself, followed by a line containing only "#" that signals the end of the input. Each string contains 1–31 bits followed by either a lowercase letter 'e' or a lowercase letter 'o'.
 

Output
Each line of output must look just like the corresponding line of input, except that the letter at the end is replaced by the correct bit so that the entire bit string has even parity (if the letter was 'e') or odd parity (if the letter was 'o').
 

Sample Input
  
101e 010010o 1e 000e 110100101o #
 

Sample Output
  
1010 0100101 11 0000 1101001010
 

Source
#include <stdio.h>
#include <string.h>
int main(){
    char a[101];
    while (gets(a)&&strcmp(a,"#")) {
        int i;
        int n0=0,n1=0;
        int len=(int)strlen(a);
        for (i=0; i<len; i++) {
            if (a[i]=='0') {
                n0++;
            }
            else if (a[i]=='1'){
                n1++;
            }
        }
        if (a[len-1]=='e') {
            if (n1%2==0) {
                a[len-1]='0';
            }
            else
                a[len-1]='1';
        }
        else if (a[len-1]=='o'){
            if (n1%2==0) {
                a[len-1]='1';
            }
            else
                a[len-1]='0';
        }
        puts(a);
    }
    return 0;
}



 
<think>首先,用户的问题是:“我想了解USART_Parity_Even的相关信息,如含义、使用方法等 请问USART_Parity_Even的含义及使用方法”。 用户提供了两个引用: - 引用[1]: 描述了USART_InitTypeDef结构体,其中USART_Parity参数用于奇偶校验位使能。取值包括:失能(USART_Parity_No)、偶校验(USART_Parity_Even)、奇校验(USART_Parity_Odd)。 - 引用[2]: 展示了一个代码示例,其中USART_Parity设置为USART_Parity_Even。 用户指定参考这些站内引用,所以我的回答必须基于这些引用,并适当引用它们。 根据系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如[^1]。 回答结构: - 我需要清晰地解释USART_Parity_Even的含义和使用方法。 - 含义:USART_Parity_Even表示在串口通信中启用偶校验。奇偶校验用于错误检测,确保数据传输的可靠性。偶校验意味着校验位被设置为使数据位(包括校验位)中1的个数为偶数。 - 使用方法:在初始化USART时,设置USART_InitTypeDef结构体的USART_Parity字段为USART_Parity_Even。这在引用[1]和[^2]中都有描述。 从引用[1]: USART_Parity参数取值USART_Parity_Even表示偶校验。 从引用[2]: 代码示例显示了如何设置USART_Parity为USART_Parity_Even。 扩展解释: - 奇偶校验的工作原理:在串行通信中,发送端计算数据位中1的个数,如果启用偶校验,则校验位设置为使总1的个数为偶数。接收端重新计算并检查是否匹配,如果不匹配,则表示数据传输可能有错误。 - 使用方法步骤: 1. 定义USART_InitTypeDef结构体。 2. 设置USART_Parity为USART_Parity_Even。 3. 调用初始化函数,如USART_Init(USARTx, &USART_InitStruct)。 参考代码示例:基于引用[2],提供一个简化的代码片段。 确保回答真实可靠:基于提供的引用,不要添加外部知识,除非必要。但用户要求了解含义和使用方法,所以我可以解释基本原理,但要标明基于引用。 生成相关问题:最后添加相关问题部分。 回答结构: 1. 引言:直接回答用户的查询。 2. 含义:解释USART_Parity_Even的含义。 3. 使用方法:描述如何在代码中使用。 4. 代码示例:提供一个代码片段。 5. 相关问题:生成相关问题。 使用中文回答。 引用标识:在引用内容或基于引用的解释后添加[^1]或[^2]。 例如: - 根据引用[1],USART_Parity_Even表示启用偶校验[^1]。 - 代码示例来自引用[2]。 最终回答大纲: - USART_Parity_Even的含义:偶校验,用于错误检测。 - 使用方法:在USART初始化时设置该参数。 - 代码示例。 - 相关问题。 </think>### USART_Parity_Even 的含义及使用方法 USART_Parity_Even 是嵌入式系统中USART(通用同步异步接收发送器)初始化参数的一部分,用于配置串口通信的奇偶校验模式。以下基于您提供的引用内容,详细解释其含义和使用方法。 #### 1. **含义** USART_Parity_Even 表示启用**偶校验**机制。在串口通信中,奇偶校验用于检测数据传输过程中的错误: - **偶校验原理**:发送端计算数据位(如8位或9位)中“1”的个数,并设置校验位,使得整个数据帧(包括数据位和校验位)中“1”的总数为**偶数**。接收端重新计算并验证该值;如果不匹配,则标识传输错误。 - **作用**:提高通信可靠性,尤其在高噪声环境中,但会增加少量开销(多一个校验位)。 根据引用[1],USART_Parity参数取值包括: - USART_Parity_No:禁用校验 - USART_Parity_Even:偶校验 - USART_Parity_Odd:奇校验 选择USART_Parity_Even时,校验位被配置为强制数据帧中“1”的个数为偶数[^1]。 简而言之,USART_Parity_Even 是一种错误检测机制,确保数据传输的完整性。 #### 2. **使用方法** 在嵌入式开发中(如使用STM32等MCU),USART_Parity_Even 的使用需通过初始化USART接口的结构体参数实现。步骤如下: 1. **定义初始化结构体**:使用`USART_InitTypeDef`类型定义结构体变量。 2. **设置校验参数**:将结构体的`USART_Parity`字段赋值为`USART_Parity_Even`。 3. **配置其他参数**:包括波特率、数据位长度(如8位或9位)、停止位等。 4. **调用初始化函数**:如`USART_Init(USARTx, &USART_InitStruct)`应用配置。 5. **可选**:启用中断或DMA(如需要错误处理)。 注意事项: - **数据位长度**:如果启用校验(如USART_Parity_Even),数据位长度通常需匹配;例如使用9位数据长度(USART_WordLength_9b)时,校验位占用第9位[^1][^2]。 - **硬件支持**:确保MCU的USART模块支持偶校验模式(大部分现代MCU均支持)。 - **通信一致性**:发送端和接收端的校验模式必须相同,否则会发生错误。 #### 3. **代码示例** 基于引用[2]提供的代码片段,以下是使用USART_Parity_Even的简化示例(以STM32 HAL库为例): ```c // 定义初始化结构体 USART_InitTypeDef USART_InitStruct = {0}; // 设置串口参数 USART_InitStruct.USART_BaudRate = 115200; // 波特率,常用值如9600、115200 USART_InitStruct.USART_WordLength = USART_WordLength_8b; // 8位数据位(启用校验时可选9位) USART_InitStruct.USART_StopBits = USART_StopBits_1; // 1位停止位 USART_InitStruct.USART_Parity = USART_Parity_Even; // 启用偶校验 USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 使能发送和接收 USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 禁用硬件流控 // 初始化USART(例如USART2) USART_Init(USART2, &USART_InitStruct); // 可选:启用中断或DMA USART_ITConfig(USART2, USART_IT_ORE, ENABLE); // 启用溢出错误中断 USART_Cmd(USART2, ENABLE); // 使能USART模块 ``` 此代码中: - `USART_Parity = USART_Parity_Even` 明确启用了偶校验。 - 数据位长度设为8位(USART_WordLength_8b),但如果系统要求校验位独立,可能需要设置为9位以容纳校验位[^2]。 #### 4. **常见问题与建议** - **错误处理**:启用校验后,可通过中断检测错误(如USART_IT_PE奇偶错误中断)。 - **性能影响**:偶校验增加计算开销,但对低速通信可靠性提升显著;在高速通信中(如115200波特率以上),建议结合CRC或重传机制[^1]。 - **兼容性**:如果通信对方不支持校验,应设置为USART_Parity_No以避免通信失败。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值