1001. A+B Format

本文详细解析了一道PAT题目,要求按照标准格式输出两个整数的和,包括负数和不同位数情况的处理。通过C语言实现,展示了如何根据数字大小分组并用逗号分隔。

Calculate a + b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).

Input

Each input file contains one test case. Each case contains a pair of integers a and b where -1000000 <= a, b <= 1000000. The numbers are separated by a space.

Output

For each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.

Sample Input
-1000000 9
Sample Output
-999,991

分析:这道题就是按照给定的格式输出2个数的和,由于a,b都是<=1000000的,所以可以直接进行判断,在编写中要注意0的情况


code:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    long int a,b;               //定义变量a,b和sum
    scanf("%ld %ld",&a,&b);     //输入a,b
    long sum = a + b;                //将a,b之和赋值给sum
    if(sum<0){                  //判断是否为负数
        sum = -1*sum;         //变为正的
        printf("-");            //输出负号
    }
    if(sum>=1000000){            //当大于1000000时
        printf("%ld,%03ld,%03ld",sum/1000000,sum/1000%1000,sum%1000);
    }
    else if(sum>=1000){               //当大于1000时
        printf("%ld,%03ld",sum/1000,sum%1000);
    }
    else{                       //小于1000时
        printf("%ld",sum);
    }
    
    return 0;
}

============================================================================================================

今天又开始啦,做完数据结构的题后继续做做PAT的啦,继续努力啦。。。^_^

modified_data [[ 0.70710678+0.70710678j 0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678-0.70710678j -0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678-0.70710678j -0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678-0.70710678j 0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678+0.70710678j 0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678+0.70710678j -0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678+0.70710678j 0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678-0.70710678j 0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678-0.70710678j 0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678-0.70710678j 0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678+0.70710678j 0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678+0.70710678j -0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678+0.70710678j -0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678-0.70710678j 0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678+0.70710678j -0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678-0.70710678j -0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ]] modified_data [[ 0.70710678+0.70710678j 0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678-0.70710678j -0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678-0.70710678j -0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678-0.70710678j 0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678+0.70710678j 0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678+0.70710678j -0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678+0.70710678j 0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678-0.70710678j 0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678-0.70710678j 0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678-0.70710678j 0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678+0.70710678j 0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678+0.70710678j -0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678+0.70710678j -0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0.70710678-0.70710678j 0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678+0.70710678j -0.70710678+0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [-0.70710678-0.70710678j -0.70710678-0.70710678j] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ] [ 0. +0.j 0. +0.j ]] 已处理并保存: /home/data/low_overhead_dmrs/SUMIMO_simulation_data/16QAM/Old_SUMIMO2T4R_CDLC_add0_MCS10_SNR_11p6_Sparse_5PRB/TxDMRS/Training_Rs_1.mat
最新发布
09-25
从您提供的输出数据来看,`modified_data` 是一个包含复数(complex numbers)的二维数组(形状可能是 `(N, 2)`),其中大部分元素已被成功置零(`0. + 0.j`),但仍保留了一些非零的复数元素(如 `0.70710678+0.70710678j` 和 `-0.70710678-0.70710678j`)。 ### **问题分析** 1. **数据格式**: - 数据是复数(`a + bj`),其中 `a` 是实部,`b` 是虚部。 - 非零值看起来像是归一化的 QPSK 或 16QAM 符号(如 `±0.7071 ± 0.7071j` 是 QPSK 的标准值)。 2. **置零逻辑**: - 您的代码似乎只对某些特定位置(如 `group_rs[:, 2, idx, :]`)进行了置零操作,但其他位置可能仍然保留原始数据。 - 如果目标是 **完全稀疏化**(即所有非指定位置都置零),可能需要调整置零范围。 3. **重复输出**: - 您提供的 `modified_data` 似乎重复了两次,可能是打印时的冗余。 --- ### **改进建议** #### **1. 确保所有目标位置被正确置零** 如果您的目标是 **仅保留特定位置的符号**(如每 12 个符号中的某些位置),其余置零,可以优化置零逻辑: ```python # 示例:对 group_rs 的特定维度置零 for idx in range(data.shape[2]): # 遍历第3维度(长度120) group_idx = idx // 12 # 计算当前属于哪一组(0-9) pos_in_group = idx % 12 # 计算组内位置(0-11) # 判断是否要置零(根据您的规则) if group_idx in {2, 7}: # 特殊组 if pos_in_group not in {0, 2, 4, 6, 8, 10}: # 保留这些位置 data[:, 2, idx, :] = 0 # 其余置零 else: # 普通组 if pos_in_group not in {2, 4, 8, 10}: # 保留这些位置 data[:, 2, idx, :] = 0 # 其余置零 ``` #### **2. 优化打印输出** 避免打印整个数组,改为统计非零元素: ```python def print_sparsity_stats(data, var_name): total_elements = data.size nonzero_elements = np.count_nonzero(data) sparsity = 100 * (1 - nonzero_elements / total_elements) print(f"{var_name} 稀疏化统计: 总元素={total_elements}, 非零元素={nonzero_elements}, 稀疏度={sparsity:.2f}%") ``` #### **3. 完整改进代码** ```python import os import scipy.io import numpy as np def process_and_save_sparse_5PRB(source_folder, target_folder, filename_pattern, var_name): os.makedirs(target_folder, exist_ok=True) # 定义保留位置规则(组内索引) keep_positions = { 2: {0, 2, 4, 6, 8, 10}, # 第2组保留的位置 7: {0, 2, 4, 6, 8, 10}, # 第7组保留的位置 } default_keep = {2, 4, 8, 10} # 其他组保留的位置 for i in range(1, 6): source_file = os.path.join(source_folder, filename_pattern.format(i)) target_file = os.path.join(target_folder, filename_pattern.format(i)) # 读取数据 mat_data = scipy.io.loadmat(source_file) data = mat_data[var_name].copy() # 遍历目标维度(假设是第3维度,索引2) for idx in range(data.shape[2]): group_idx = idx // 12 pos_in_group = idx % 12 # 判断是否要置零 if group_idx in keep_positions: if pos_in_group not in keep_positions[group_idx]: data[:, 2, idx, :] = 0 # 置零 else: if pos_in_group not in default_keep: data[:, 2, idx, :] = 0 # 置零 # 保存并打印统计 scipy.io.savemat(target_file, {var_name: data}) print_sparsity_stats(data[:, 2, :, :], f"{filename_pattern.format(i)}/{var_name}") def print_sparsity_stats(data, label): total = data.size nonzero = np.count_nonzero(data) sparsity = 100 * (1 - nonzero / total) print(f"{label}: 稀疏度={sparsity:.2f}% (非零元素={nonzero}/{total})") # 示例调用 process_and_save_sparse_5PRB( source_folder="/home/data/low_overhead_dmrs/SUMIMO_simulation_data/16QAM/Old_SUMIMO2T4R_CDLC_add0_MCS10_SNR_11p6/TxDMRS", target_folder="/home/data/low_overhead_dmrs/SUMIMO_simulation_data/16QAM/Old_SUMIMO2T4R_CDLC_add0_MCS10_SNR_11p6_Sparse_5PRB/TxDMRS", filename_pattern="Training_Rs_{}.mat", var_name="group_rs" ) ``` --- ### **关键改进点** 1. **更清晰的置零规则**: - 使用字典 `keep_positions` 明确每组保留的位置。 - 默认保留 `{2, 4, 8, 10}`,特殊组(如第2、7组)保留更多位置。 2. **稀疏度统计**: - 打印非零元素比例,验证稀疏化效果。 3. **避免冗余打印**: - 不再打印整个数组,而是输出关键统计信息。 --- ### **下一步建议** 1. **验证数据正确性**: - 检查置零后的数据是否符合预期(如非零符号是否仅出现在指定位置)。 2. **扩展到其他变量**: - 对 `group_freqdata`、`group_lsresult` 等变量应用相同逻辑。 3. **性能优化**: - 如果数据量很大,可以用 `numba` 加速循环。 如果需要进一步调整(如修改保留位置规则),请提供更详细的需求!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值