Perl-晶晨2021届笔试题
原题
代码
open IN, '<', 'name.txt';
$line_count=0;
while(<IN>){
$line_count++; # 统计行数
chomp;
@line = split('\s',$_); # 将姓名和分数分解
$name = $line[0];
$grade = $line[1];
$hash{$name} = $hash{$name} + $grade; # 求每个人的总分
}
$num_subject = $line_count/%hash; # 求科目数
print("num_subject: $num_subject\n");
foreach $key (keys %hash){ # 求平均分
$hash{$key} = $hash{$key}/$num_subject;
}
foreach $key (sort keys %hash){ # 按姓名排序输出
print("$key $hash{$key}\n");
}
print("------------------\n");
%temp_hash = %hash;
for($i=0;$i<%hash;$i++){ # 按平均分排序输出, 遍历N次,每次取最大值输出,取出后删除该哈希,继续遍历找最大值
$max = 0;
$max_name = '';
foreach $key (keys %temp_hash){
if($temp_hash{$key}>$max) {
$max = $temp_hash{$key};
$max_name = $key;
}
}
print("$max_name $max\n");
delete $temp_hash{$max_name}; # 删除最大值的哈希元素
}
close IN;
输入输出
输入
maxiangyu 100
wangtao 100
maxiangyu 0
wangtao 100
输出
num_subject: 2
maxiangyu 50
wangtao 100
------------------
wangtao 100
maxiangyu 50