竞争性编程问题说错答案

时间:2018-07-07 14:11:30

标签: c++

Paradox with averages Programming problem

  • 我有一班计算机科学专业的学生用数组表示,一班经济学学生的数学用数组表示。

  • 该数组填充有代表每个学生智商的值。

  • 一个著名的笑话如下:如果一个坏的计算机科学专业的学生辍学而去另一所大学学习经济学,他将增加两所大学的平均智力。

  • 我必须遍历计算机科学领域,检查每个学生是否离开并加入经济学,他是否会提高两组学生的平均智商。然后,我必须计算出有多少学生并打印到屏幕上。

我似乎已经得到了正确的答案,但是其中一个测试用例是错误的,任何人都可以将自己的智慧放在我身上吗?谢谢。

int main(){

int cases;
cin >> cases;

for(int i = 0; i < cases; i++)
{
    int numCs;
    int numEc;
    cin >> numCs;
    cin >> numEc;

    int csArray[numCs];
    int ecArray[numEc];
    long csTotal = 0;
    long ecTotal = 0;

    for(int j = 0; j < numCs; j++)
    {
        cin >> csArray[j];
        csTotal += csArray[j];
    }
    for(int j = 0; j < numCs; j++)
    {
        cin >> ecArray[j];
        ecTotal += ecArray[j];
    }

    double csAvg =  csTotal / (double)numCs;
    double ecAvg = ecTotal / (double)numEc;

    int count = 0;
    for(int j = 0; j < numCs; j++)
    {
        if((csArray[j] < csAvg) && (csArray[j] > ecAvg))
        {
            count++;
        }
    }

    cout << count << endl;

}

return 0;

}

1 个答案:

答案 0 :(得分:0)

您的第二个循环应该运行到numE而不是numC。 另外,浮点除法有时可能很棘手,因为它是有限的近似值,所以线

if((csArray[j] < csAvg) && (csArray[j] > ecAvg))

可以替换为

(csTotal > numCs * csArray[j]) && (ecTotal < numEc * csArray[j])

这传达了相同的含义,而没有麻烦的浮点计算。