Sequence Concatenation Algorithm 连续行长度和不超200的实现方法咨询
代码调整方案
THRESHOLD = 200 # 读取输入文件,获取每行长度列表X with open('input.txt', 'r', encoding='utf-8') as file: data = [x.strip() for x in file.readlines()] X = [len(line) for line in data] result_lines = [] SOPP = 0 pos = 0 n = len(X) while pos < n: current_sum = 0 current_indices = [] current_prod = 1 current_group_sopp = 0 # 从当前位置开始分组,累加长度不超过阈值 while pos < n and current_sum + X[pos] <= THRESHOLD: current_sum += X[pos] current_indices.append(pos) # 按X0 + X0X1 + X0X1X2规则计算当前组的和 current_prod *= X[pos] current_group_sopp += current_prod pos += 1 # 拼接当前组输出信息 indices_str = ','.join(map(str, current_indices)) count = len(current_indices) length_list = [str(X[i]) for i in current_indices] line = f"从索引{current_indices[0]}的{X[current_indices[0]]}开始:{'+'.join(length_list)} = {current_sum}(索引数量:{count},总长度:{current_sum},对应序列索引:{indices_str})" result_lines.append(line) SOPP += current_group_sopp # 写入输出文件 with open('output.txt', 'w', encoding='utf-8') as fw: fw.write('\n'.join(result_lines)) # 输出全局求和结果 print("按规则计算的总求和值SOPP为:", SOPP)
调整说明
- 原有代码中生成X列表和写输出的逻辑耦合,且输出内容为硬编码的固定字符串,没有动态计算分组结果,调整为先读取所有行生成完整的X列表,再单独做分组计算
- 新增指针遍历的分组逻辑:从起始位置开始累加行长度,直到加入下一行长度会超过阈值200即停止生成本组,指针跳到下一组起始位置继续循环,完全匹配你给出的示例分组规则
- 补充了你要求的
X0 + X0X1 + X0X1X2规则的求和逻辑:每组内部遍历元素时同步计算乘积累加值,最后汇总所有组的结果得到全局SOPP - 新增了编码参数适配不同系统的文件读写,避免乱码问题
内容的提问来源于stack exchange,提问作者IamNew
相关产品推荐
相关产品推荐

