我可以用什么算法来计算有多少学生得分相同?

时间:2012-02-09 20:36:49

标签: c++ arrays loops pass-by-reference

我目前正在学习C ++课程中的指针。下面的代码有点令人困惑,但我最终得到了它,我当前的问题是我的逻辑。

我被告知我可以找到没有排序或搜索并使用单一索引的具有相同分数的学生数量,但我不能为我的生活弄清楚。

我的分数存储在scoresArray中,元素编号标识了它所属的学生。

#include <iostream>
using namespace std;

const int maxStudents = 30;
void readScores(double[]);
void gradeCounter(double[],int&,int&,int&,int&,int&);
void sameScore(double[]);

int main()
{
    int As = 0, Bs = 0, Cs = 0, Ds = 0, Fs = 0; // Distribution of scores

    double scoreArray[maxStudents];
    readScores(scoreArray);
    gradeCounter(scoreArray, As, Bs, Cs, Ds, Fs);

   system ("PAUSE");
    return 0;
}


void readScores(double scoreArray[])
{
    double *scorePTR;
    scorePTR = scoreArray;

    for(int count = 0; count < maxStudents; count++)
    {
        cout<<"Please enter score for student "<<count+1<<" or -999 to end.\n";
        cin>>*(scorePTR+count);
        if(*(scorePTR+count) == -999)
        break;
    }
}


void gradeCounter(double scoreArray[],int &As,int &Bs,int &Cs,int &Ds,int &Fs)
{
double *scorePTR2;
scorePTR2 = scoreArray;

    for(int count = 0; count < maxStudents; count++)
    {
        if(scoreArray[count] >= 90)
            As+=1;
        else if(*(scorePTR2+count) >= 80 && *(scorePTR2+count) < 90)
            Bs+=1;      
        else if(*(scorePTR2+count) >= 70 && *(scorePTR2+count) < 80)
            Cs+=1;
        else if(*(scorePTR2+count) >= 60 && *(scorePTR2+count) < 70)
            Ds+=1;
        else if(*(scorePTR2+count) >= 0 && *(scorePTR2+count) < 60)
            Fs+=1;
    }
}

void sameScore(double scoreArray[])
{

}

1 个答案:

答案 0 :(得分:4)

您可以创建包含101个元素的第二个数组(从0到100),将其全部初始化为0,并使用当前学生的分数作为此数组的索引

因此,如果当前学生的得分为87,那么你可以将this_new_array [87]增加1。

最后,索引X处的数组将包含得分为X的学生数。