从C中的for循环中找到最大值和最小值

时间:2018-08-10 04:00:47

标签: c

我正在尝试从for循环中找到最大和最小编号。我的代码如下:

  if (obj_counter > 0)
  {
     list_org[--obj_counter].RestoreSeries(list_taker[obj_counter].Memento);
     global_series.Points.Clear();
     foreach (var dp in list_org[obj_counter].OSeries.Points) 
     global_series.Points.Add(dp);
  }

我输入了10 30 60 100 150 210进行测试,它返回1060。应该是2060。看来min始终是最低的条目减0。...我在哪里做错了?

2 个答案:

答案 0 :(得分:3)

您正在尝试查找给定数字集中数字之间的最小和最大差异。并且您正在将minmax初始化为数字num集合的第一个元素。

由于您正在比较数字与minmax之间的后续差异,因此在两种情况下将无法使用:
a)如果数字之间的最小差比nums的第一个元素 b)如果数字之间的最大差小于nums

的第一个元素

要使其正常工作:

  1. 您必须将min初始化为尽可能高的整数,例如INT_MAX
  2. 您必须将max初始化为某个最低的整数,例如INT_MIN

因此更改以下两行:

int max = nums[0];
int min = nums[0];

int max = INT_MIN;
int min = INT_MAX;

当然,您必须在文件的开头包含#include <limits.h>INT_MAX的值的行INT_MIN

答案 1 :(得分:1)

尝试以其他方式看待事物。如果要搜索数组的两个连续元素之间的最小和最大差异,则可以发明一个“虚拟”数组-该数组包含差异:

10  30  60  100  150  210    <- nums[N]: real/original array
  20  30  40   50   60       <- diffs[]: virtual array

此虚拟数组具有N-1个元素;每个元素都是使用公式nums[i+1]-nums[i]动态计算的。

因此,首先将变量 min max 设置为等于虚拟数组的第一个元素;然后扫描后续元素(从 virtual 数组的1到N-1,因此从 real 数组的1到N-2),并进行比较。

您可以使用函数从虚拟数组中获取元素,但是在这种情况下,它会显得过分膨胀。