华为OD机试统一考试D卷C卷 - 数据单元的变量替换
题目描述
将一个csv格式的数据文件中包含有单元格引用的内容替换为对应单元格内容的实际值。 Comma seprated values(CSV)逗号分隔值,csv格式的数据文件使用逗号作为分隔符将各单位的内容进行分隔。
输入描述
- 输入只有一行数据,用逗号分隔每个单元格,行尾没有逗号。最多26个单元格,对应编号A-Z。
- 每个单元格的内容包含字母和数字,以及使用<>分隔的单元格引用,例如:表示引用第一个单元的值。
- 每个单元格的内容,在替换前和替换后均不超过100个字符。
- 引用单元格的位置不受限制,运行排在后面的单元格被排在前面的单元格引用。
- 不存在循环引用的情况,比如下面这种场景是不存在的: A单元格:aCd8u B单元格:kAydzqo
- 不存在多重<>的情况,一个单元格只能引用一个其他单元格。比如下面这种场景是不存在的: A单元格:aCd8u B单元格:kAydzqo C单元格:y<>d
输出描述
输出所有单元格展开的内容,单元格之间用逗号分隔。处理过程中出现错误时,输出字符串“-1”表示出错。
示例1
输入
1,2<A>00
输出
1,2100
说明 第二个单元中有对A单元的引用,A单元格的值为1,替换时,将A单元的内容替代的位置,并和其他内容合并。
示例2
输入
<B>12,1
输出
112,1
说明 第一个单元中有对B单元的引用,B单元格的值为1,替换时,将第二个数据单元的内容替代的位置,并和其他内容合并。
Java
import java.util.Scanner;
import java.util.StringJoiner;
public class Main {
// 存储单元格的值
static String[] cellValues;
// 标记单元格是否正在被处理,用于检测循环引用
static boolean[] isProcessing;
// 标记单元格是否已处理完成
static boolean[] hasProcessed;
public static void main(String[] args) {
Scanner inputScanner = new Scanner(System.in);
// 读取一行输入,并以逗号分隔,初始化单元格值数组
cellValues = inputScanner.nextLine().split(",");
// 如果单元格数量超过26,则直接返回-1
if (cellValues.length > 26) {
System.out.println("-1");
return;
}
// 初始化isProcessing和hasProcessed数组
isProcessing = new boolean[cellValues.length];
hasProcessed = new boolean[cellValues.length];
StringJoiner resultJoiner = new StringJoiner(",");
for (int cellIndex = 0; cellIndex < cellValues.length; cellIndex++) {
// 对每个单元格进行处理,如果
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
机试E卷D卷刷题日记 文章被收录于专栏
机试刷题记录