与数组一起使用的函数
a function that works with arrays
我需要你的帮助来编写一个执行以下操作的函数:
它接收到 2 个指针(double 类型);
一个指向数组的第一个元素,另一个指向数组的后面。不能取消引用此指针。
如果指针指向两个相邻的数组元素,则输出第一个指针的值。否则,函数从第一个元素调用到中间的元素,从中间的元素调用到最后,这两个值中较大的一个是输出。
禁止编制索引(是的,这是家庭作业)。也禁止这种类型的东西 -> *(p+1)。它必须完全按照描述的方式工作(如果没有,我就没有分数)。
我真的希望我能把它讲得通俗易懂,因为我自己都不懂?虽然有人告诉我它非常简单,可以用大约 10 行代码编写,但我就是无法掌握它的窍门?我知道如何编写通常的函数来找到通常的最大数量,但这显然不是这个问题所要求的...
以下是一些应该起作用的示例:
double arr[] = {4.3, 15.1, 2.2, -3.4, 18.1, 1.1, 3.0};
printf("%g", parallel_max(arr, arr+7));
预期输出:18.1
double arr[] = {4.3, 15.1, 2.2, 18.2, -3.4, 1.1, 3.0};
printf("%g", parallel_max(arr, arr+7));
预期输出:18.2
double arr[] = {3, 1, 2};
printf("%g", parallel_max(arr, arr+3));
预期输出:3
double arr[] = {42.42};
printf("%g", parallel_max(arr, arr+1));
预期输出:42.42
请帮忙?
如果我理解你的作业,你想要一个递归的解决方案;其中具有 1 个元素的数组的最大值是该元素,而具有 1 个以上元素的数组的最大值递归地是左半部分的最大值或右半部分的最大值。
// NOT TESTED
double parallel_max(double *a, double *b) {
if (b - a == 1) return *a; // they're consecutive
double *c = a + ((b - a) / 2); // c points to middle
double left = parallel_max(a, c);
double right = parallel_max(c, b);
return (left > right) ? left : right;
}
我需要你的帮助来编写一个执行以下操作的函数:
它接收到 2 个指针(double 类型);
一个指向数组的第一个元素,另一个指向数组的后面。不能取消引用此指针。
如果指针指向两个相邻的数组元素,则输出第一个指针的值。否则,函数从第一个元素调用到中间的元素,从中间的元素调用到最后,这两个值中较大的一个是输出。
禁止编制索引(是的,这是家庭作业)。也禁止这种类型的东西 -> *(p+1)。它必须完全按照描述的方式工作(如果没有,我就没有分数)。
我真的希望我能把它讲得通俗易懂,因为我自己都不懂?虽然有人告诉我它非常简单,可以用大约 10 行代码编写,但我就是无法掌握它的窍门?我知道如何编写通常的函数来找到通常的最大数量,但这显然不是这个问题所要求的...
以下是一些应该起作用的示例:
double arr[] = {4.3, 15.1, 2.2, -3.4, 18.1, 1.1, 3.0};
printf("%g", parallel_max(arr, arr+7));
预期输出:18.1
double arr[] = {4.3, 15.1, 2.2, 18.2, -3.4, 1.1, 3.0};
printf("%g", parallel_max(arr, arr+7));
预期输出:18.2
double arr[] = {3, 1, 2};
printf("%g", parallel_max(arr, arr+3));
预期输出:3
double arr[] = {42.42};
printf("%g", parallel_max(arr, arr+1));
预期输出:42.42
请帮忙?
如果我理解你的作业,你想要一个递归的解决方案;其中具有 1 个元素的数组的最大值是该元素,而具有 1 个以上元素的数组的最大值递归地是左半部分的最大值或右半部分的最大值。
// NOT TESTED
double parallel_max(double *a, double *b) {
if (b - a == 1) return *a; // they're consecutive
double *c = a + ((b - a) / 2); // c points to middle
double left = parallel_max(a, c);
double right = parallel_max(c, b);
return (left > right) ? left : right;
}