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
posted @ 2020-08-14 20:23  笑着刻印在那一张泛黄  阅读(98)  评论(0编辑  收藏  举报