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