1 条题解
-
0
题意分析
题目要求计算两个机械表面接触后剩余的空格总数("空隙")。每个图像有列,由""和""组成:
- 左侧表面从第列开始向右延伸
- 右侧表面从第列开始向左延伸
- 中间可能存在空格分隔 接触后,左右表面会水平移动直到某一行接触,此时需要计算所有行中剩余的空格总数。
解题思路
- 对每行计算空格数
- 找出所有行中的最小空格数
- 总空隙 = 所有行空格总数 - ( × 最小行空格数)
- 因为接触后每行会移动最小空格数的距离,所以剩余空格为各行空格数与最小值的差之和
实现步骤
- 读取图像行数
- 对每行: a) 统计该行空格数 b) 更新最小空格数
- 计算总空隙 =
- 输出结果
C++实现
#include <iostream> #include <cstring> using namespace std; #define STRING_LEN 26 char szInputMsg[STRING_LEN] = {0}; int main() { int N; while((cin >> N) && N) { cin.get(); // 去除'\n' int nTotalSapce = 0; int nMinLineSapce = STRING_LEN; for (int nLine = 0; nLine < N; ++nLine) { cin.getline(szInputMsg, STRING_LEN); int nLineSpaceCount = 0; for (int nIndex = 0; nIndex < STRING_LEN - 1; ++nIndex) { if (szInputMsg[nIndex] == ' ') ++nLineSpaceCount; else if (nLineSpaceCount > 0) break; } nTotalSapce += nLineSpaceCount; if (nLineSpaceCount < nMinLineSapce) nMinLineSapce = nLineSpaceCount; } cout << nTotalSapce - (N * nMinLineSapce) << endl; } return 0; }
代码说明
-
输入处理:
- 使用处理换行符
- 每行读取到数组中
-
空格统计:
- 遍历每行字符,统计连续空格数
- 遇到非空格字符时停止统计
-
关键计算:
- 维护最小空格数
- 最终空隙 =
-
复杂度分析:
- 时间复杂度:
- 空间复杂度:
-
注意事项:
- 行数范围:
- 每行固定个字符
- 使用包含字符串结束符
- 1
信息
- ID
- 494
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者