我正在尝试解决此问题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;
}
答案 0 :(得分:5)
memset(flowerCosts, 0, 100);
100应为sizeof(flowerCosts)
。 100不会填满整个数组,因为它是以字节为单位的大小。
qsort(flowerCosts, 100, sizeof(int), comp_desc);
您可能只想对您填写的条目(flowersNeeded
)进行排序,而不是全部100条。
由于这两个错误,您要在数组的未初始化部分中对垃圾值进行排序。