面试题答案
一键面试实现逻辑
- 初始化两个变量,分别用于记录总发送金额和总接收金额。
- 逐行读取文本文件,对于每一行:
- 提取发送方地址、接收方地址和金额。
- 将金额累加到总发送金额变量中。
- 在一个关联数组中记录发送方地址的支出金额。
- 将金额累加到总接收金额变量中。
- 在一个关联数组中记录接收方地址的收入金额。
- 遍历关联数组,输出每个地址的总收支情况。
- 比较总发送金额和总接收金额,验证交易金额的总和是否平衡。
完整脚本代码
#!/bin/bash
# 初始化总发送金额和总接收金额
total_sent=0
total_received=0
# 关联数组用于记录每个地址的收支情况
declare -A address_balance
while IFS=, read -r sender receiver amount; do
# 累加总发送金额
total_sent=$((total_sent + amount))
# 记录发送方地址的支出
if [ -z ${address_balance[$sender]} ]; then
address_balance[$sender]=$((-amount))
else
address_balance[$sender]=$((address_balance[$sender] - amount))
fi
# 累加总接收金额
total_received=$((total_received + amount))
# 记录接收方地址的收入
if [ -z ${address_balance[$receiver]} ]; then
address_balance[$receiver]=$amount
else
address_balance[$receiver]=$((address_balance[$receiver] + amount))
fi
done < blockchain_transactions.txt
# 输出每个地址的总收支情况
echo "每个地址的总收支情况:"
for address in ${!address_balance[@]}; do
echo "$address: ${address_balance[$address]}"
done
# 验证交易金额的总和是否平衡
if [ $total_sent -eq $total_received ]; then
echo "交易金额总和平衡"
else
echo "交易金额总和不平衡"
fi
请将blockchain_transactions.txt
替换为实际的区块链交易记录文本文件名。该脚本通过while
循环逐行读取文件,在读取过程中计算总发送和总接收金额,并更新每个地址的收支情况,最后输出每个地址的总收支情况并验证金额是否平衡。