读入 n(>)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:
每个测试输入包含 1 个测试用例,格式为
第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
... ... ...
第 n+1 行:第 n 个学生的姓名 学号 成绩
其中姓名
和学号
均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。
输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301 Joe Math990112
分析:
1.考核的应该是冒泡排序,通过冒泡排序,获取成绩的最大值和最小值。可能还会考核二维数组的相关概念。
2.取值范围的问题,需要判断length的长度
read num max=0 #给一个初始值,这里直接指定了,也可以从数组里面抽取一个值 min=100 for((i>=0;i<$num;i++)) do read line arr_name=$( echo $line |awk '{print $1}') arr_id=$( echo $line |awk '{print $2}') arr_score=$( echo $line |awk '{print $3}') if [ $max -le $arr_score ];then max=$arr_score max_p=$arr_name max_id=$arr_id fi if [ $min -ge $arr_score ];then #此处不用elif的原因为,初始化的值是直接给的 min=$temp min_p=$arr_name min_id=$arr_id fi unset line #unset 卸载变量不需要$ done echo "$max_p $max_id" echo "$min_p $min_id"
存在运行超时的毛病
调整为python版本
#!/usr/bin/python3 #-*- coding:utf-8 -*- num=int(input()) max=0 min=100 for i in range(num): line=input() name,id, score=line.split()[0],line.split()[1],int(line.split()[2]) if max < score: max=score max_name,max_id=name,id if min > score: min=score min_name, min_id = name, id print(max_name,max_id) print(min_name,min_id)
在bash 4.0,关联可以使用关联数组的功能了,示例如下所示:
wyf349@ubuntu:~$ declare -A test #首先声明关联数组 wyf349@ubuntu:~$ test=([1]='1 tt' [2]='2 dd') #给关联数组赋值也可以单个赋值,test[1]='1 tt' wyf349@ubuntu:~$ echo ${test[*]} 1 tt 2 dd wyf349@ubuntu:~$ echo ${test[@]} 1 tt 2 dd wyf349@ubuntu:~$ echo ${test[0]} //此处元素为空,表示为匹配到索引为0的值,所以关联数组与一般数组不同,此处的索引值不是位置,而是键值 wyf349@ubuntu:~$ echo ${test[1]} 1 tt wyf349@ubuntu:~$ echo ${test[2]} 2 dd wyf349@ubuntu:~$ echo ${!test[@]} #输出索引值 1 2 wyf349@ubuntu:~$ echo ${!test[*]} 1 2