7-11 互评成绩 (25分)
学生互评作业的简单规则是这样定的:每个人的作业会被k
个同学评审,得到k
个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。
输入格式:
输入第一行给出3个正整数N
(3 < N
≤,学生总数)、k
(3 ≤ k
≤ 10,每份作业的评审数)、M
(≤ 20,需要输出的学生数)。随后N
行,每行给出一份作业得到的k
个评审成绩(在区间[0, 100]内),其间以空格分隔。
输出格式:
按非递减顺序输出最后得分最高的M
个成绩,保留小数点后3位。分数间有1个空格,行首尾不得有多余空格。
输入样例:
6 5 3
88 90 85 99 60
67 60 80 76 70
90 93 96 99 99
78 65 77 70 72
88 88 88 88 88
55 55 55 55 55
输出样例:
87.667 88.000 96.000
https://blog.csdn.net/qq_37708702/article/details/79592525
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<climits> 5 using namespace std; 6 bool cmp(double a,double b){ 7 return a > b; 8 } 9 int main(){ 10 int n,k,m,a,mx,mn,kx; 11 double sum,arr[10001]; 12 scanf("%d%d%d",&n,&k,&m); 13 memset(arr,0,sizeof(arr)); 14 kx = 0; 15 for(int i = 0;i < n;i++){ 16 mx = INT_MIN,mn = INT_MAX,sum = 0;//最大值初始化为最小值,最小值初始化为最大值 17 for(int d = 0;d < k;d++){ 18 scanf("%d",&a); 19 mx = max(a,mx); 20 mn = min(a,mn); 21 sum += a; 22 } 23 sum = sum - mx - mn; 24 arr[kx++] = sum / (k - 2); 25 } 26 sort(arr,arr + kx,cmp);//写代码要严谨,竟然把kx写成k了,反思!!! 27 for(int i = m - 1;i >= 0;i--){ 28 if(i) 29 printf("%.3lf ",arr[i]); 30 else 31 printf("%.3lf ",arr[i]); 32 } 33 return 0; 34 }
7-9 小字辈 (25分)
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。
输入格式:
输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。
输出格式:
首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。
输入样例:
9
2 6 5 5 -1 5 6 4 7
输出样例:
4
1 9
https://blog.csdn.net/shiliang97/article/details/97865961
1 #include<iostream> 2 using namespace std; 3 int zuzong[100005]; 4 int countzu[100005]; 5 int count(int i){ 6 if(countzu[i]==0){ 7 int coun=1; 8 if(zuzong[i]!=-1){ 9 coun=count(zuzong[i])+1; 10 } else{ 11 coun=1; 12 } 13 countzu[i]=coun; 14 return coun; 15 } 16 else{ 17 return countzu[i]; 18 } 19 } 20 int main(){ 21 int n; 22 cin>>n; 23 int a; 24 25 for(int i=1;i<=n;i++){ 26 cin>>a; 27 zuzong[i]=a; 28 } 29 int max=0; 30 for(int i=1;i<=n;i++){ 31 countzu[i]=count(i); 32 if(count(i)>max){ 33 max=count(i); 34 } 35 } 36 cout<<max<<endl; 37 int flag=1; 38 for(int i=1;i<=n;i++){ 39 if(countzu[i]==max){ 40 if(flag){ 41 cout<<i; 42 flag=0; 43 }else{ 44 cout<<" "<<i; 45 } 46 47 } 48 } 49 return 0; 50 }