在Windows与Linux上获得不同的答案

时间:2015-06-03 16:15:30

标签: c

我正在尝试解决此问题https://www.hackerrank.com/challenges/flowers 当我在我的机器上的Windows 7上的Visual Studio 2013中运行我的代码时,我得到了正确的答案,但在网站上(我很确定他们使用的是Linux,我很肯定这是他们使用的编译器gcc 4.9.2,C99标准)我得到非常大的答案数,特别是第一个测试用例的12588576(而不是13)和第二个测试用例的1395920336(而不是15)。我猜它与qsort调用有关。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int comp_desc(const void * a, const void * b)
{
    int * aPtr = (int*)a;
    int * bPtr = (int*)b;
    return *bPtr - *aPtr;
}

int main()
{
    int flowersNeeded, numFriends, i;
    scanf("%d %d", &flowersNeeded, &numFriends);
    getchar();
    int flowerCosts[100];
    memset(flowerCosts, 0, 100);
    for (i = 0; i < flowersNeeded; ++i)
    {
        scanf("%d", &flowerCosts[i]);
    }
    qsort(flowerCosts, 100, sizeof(int), comp_desc);
    int flowersBought = 0;
    int moneySpent = 0;
    int multiplier = 1;
    for (i = 0; i < flowersNeeded; ++i)
    {
        moneySpent += flowerCosts[i] * multiplier;
        multiplier = (++flowersBought / numFriends) + 1;
    }
    printf("%d\n", moneySpent);
    return 0;
}

1 个答案:

答案 0 :(得分:5)

memset(flowerCosts, 0, 100);

100应为sizeof(flowerCosts)。 100不会填满整个数组,因为它是以字节为单位的大小。

qsort(flowerCosts, 100, sizeof(int), comp_desc);

您可能只想对您填写的条目(flowersNeeded)进行排序,而不是全部100条。

由于这两个错误,您要在数组的未初始化部分中对垃圾值进行排序。