我必须用c#编写一个函数,它使用的结构希望返回多个学生列表的所有最小值之间的平均值,例如,我们有两个列表:
student_0 has :(19,20,18,14);
student_1 has :(15,30,29,19);我必须从s0中选出最小票数,并将第一个值设为所有最小值之和,并做平均值:(举个例子) 14+15 /2(total_min_values的计数器);
我的代码是:
struct studente{
unsigned int *voti;
unsigned int voti_size;
};
float mean_of_min(struct studente *lst, int lst_size) {
int minimo = lst->voti[0];
float somma = 0;
float media = 0;
int conta = 0;
for (int i = 0; i < lst_size; i++) {
for (int j = 1;j< lst->voti_size ; j++){
if (minimo <= lst[i].voti[j] ){
somma+=minimo;
conta++;
}
if (minimo > lst[i].voti[j]){
minimo = lst->voti[j];
somma+=minimo;
conta++;
}
media= somma / conta;
}
}
return media;
}这个函数可以工作,但是不能正常工作,您知道如何修复或改进我的功能吗?
谢谢
发布于 2020-11-27 10:23:40
首先,当您提交一个问题时,请缩进您的代码,这样其他人就更容易理解您的代码了。
然后,下面的代码在您的expext中无法工作
for (int i = 0; i < lst_size; i++) {
for (int j = 1;j< lst->voti_size ; j++){
if (minimo <= lst[i].voti[j] ){
somma+=minimo;
conta++;
}例如,如果有两个学生的值为(5,4,3)和(2,5,1),那么您的输出将是4+3+2+1 = 15,而您期望的是3+1=4
你的algoritm是错误的,你必须得到一个学生的最小值,而不是每次你的价值低于目前的最低值。
我给你这个伪代码,我让你把它翻译成C,这样你就能更好地理解
sum = 0
For student in students:
| min = student.votes[0]
| For vote in student.votes
| | IF vote < min:
| | | min = vote
| sum += min还请注意,您的均值计算必须在循环之外完成,以输出正确的值。
最后,这部分在您的算法中没有意义。
if (minimo > lst[i].voti[j]){
minimo = lst->voti[j];
somma+=minimo;
conta++;
}下一次,当您有这样的练习时,在纸上用伪代码编写一个算法,并手动运行它,以检查您是否找到了所需的输出。那时才开始编码。
https://stackoverflow.com/questions/65035410
复制相似问题