gpt4 book ai didi

c - 如何在没有循环的情况下在 C 中找到一组数字的最小值和最大值?

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:19 25 4
gpt4 key购买 nike

假设我有 10 个数字(双数),我必须找到最小的数字和最大的数字而不使用循环,我该怎么做?

最佳答案

在伪代码中,如果这是作业:

min = arr[0]
max = arr[0]
for n in 1..size(arr)-1:
if arr[n] > max:
max = arr[n]
if arr[n] < min:
min = arr[n]

如果出于某种原因,您不能使用循环(并且这肯定将其标记为家庭作业 - 头脑正常的人不会在没有循环的情况下尝试此操作),只需展开循环:

min = arr[0]
if arr[1] < min min = arr[1]
if arr[2] < min min = arr[2]
if arr[3] < min min = arr[3]
if arr[4] < min min = arr[4]
if arr[5] < min min = arr[5]
if arr[6] < min min = arr[6]
if arr[7] < min min = arr[7]
if arr[8] < min min = arr[8]
if arr[9] < min min = arr[9]
max = arr[0]
if arr[1] > max max = arr[1]
if arr[2] > max max = arr[2]
if arr[3] > max max = arr[3]
if arr[4] > max max = arr[4]
if arr[5] > max max = arr[5]
if arr[6] > max max = arr[6]
if arr[7] > max max = arr[7]
if arr[8] > max max = arr[8]
if arr[9] > max max = arr[9]

对于 10 个条目来说,这还不算,但随着数量的增加,它会变得很麻烦。

或者对于我们这些比较古怪的人来说,递归解决方案 :-)

def findMax (arr, cur, idx):
if idx < 0:
return cur
if arr[idx] > cur
return findMax (arr, arr[idx], idx-1)
return findMax (arr, cur, idx-1)

def findMin (arr, cur, idx):
if idx < 0:
return cur
if arr[idx] < cur
return findMin (arr, arr[idx], idx-1)
return findMin (arr, cur, idx-1)

max = findMax (arr, arr[9], 8)
min = findMin (arr, arr[9], 8)

但我不会提交递归解决方案 - 如果您还没有完成循环,它可能远远超出了您的类(class)正在运行的水平。


而且,由于递归解决方案是一个相当漂亮的无循环解决方案(而且您使用它并且不被发现是剽窃者的机会几乎为零),这里是:

#include <stdio.h>

static int findMin (int *arr, int cur, int idx) {
if (idx < 0)
return cur;
if (arr[idx] < cur)
return findMin (arr, arr[idx], idx-1);
return findMin (arr, cur, idx-1);
}

static int findMax (int *arr, int cur, int idx) {
if (idx < 0)
return cur;
if (arr[idx] > cur)
return findMax (arr, arr[idx], idx-1);
return findMax (arr, cur, idx-1);
}

int main (void) {
int nums[] = {27,18,28,18,28,45,93,14,15,92,65,35,89};
int min, max;
int x = sizeof(nums) / sizeof(*nums) - 1;

max = findMax (nums, nums[x], x-1);
min = findMin (nums, nums[x], x-1);

printf ("min=%d, max=%d\n", min, max);
return 0;
}

这个输出:

min=14, max=93

正如预期的那样,但不要在大型​​列表中使用它,因为您可能会用完堆栈空间。

关于c - 如何在没有循环的情况下在 C 中找到一组数字的最小值和最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3775479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com