#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
void sort(int a[], int n)
{
int i, j;
for (i = 0; i < n - 1; i++)
for (j = i; j < n - 1; j++)
if (a[j] > a[j + 1])
a[j] = a[j + 1] - (a[j + 1] = a[j]);
}
int call(int i, int hit, int t, int h[], int n, int count)
{
static int max = 0;
if (t <= 0)
{
if (count > max)
max = count;
return max;
}
if (h[i] > 0)
{
h[i] -= hit;
if (h[i] <= 0)
count++;
max = call((i + 1) % n, hit, t - 1, h, n, count);//this is line where illegal access to memory is being made
count--;
h[i] += hit;
}
max = call((i + 1) % n, hit, t, h, n, count);
return max;
}
int getMaxMonsters(int n, int hit, int t, int h[]) {
sort(h, n);
int m = call(0, hit, t, h, n, 0);
return m;
}
int main() {
int n;
int hit;
int t;
scanf("%d %d %d", &n, &hit, &t);
int h[100000];
for (int h_i = 0; h_i < n; h_i++) {
scanf("%d", &h[h_i]);
}
int result = getMaxMonsters(n, hit, t, h);
printf("%dn", result);
return 0;
}
此代码计算可以杀死的最大怪物数量。
-
n
不是怪物 -
hit
是命中值 -
h[]
包含每个怪物的生命值 -
t
是可用的总时间
因此,必须在t秒内杀死最大数量的怪物,并且每秒只能杀死一个怪物。我因非法访问内存而遇到分段错误。无法理解我是如何跨越数组限制的。
询问调试器或使用 Valgrind。它会自动检测内存管理错误。它还详细介绍了您的程序。
使用瓦尔格林德太简单了。