2020-10-25

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 }
原文地址:https://www.cnblogs.com/-gcq/p/13875761.html