我正在尝试从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。...我在哪里做错了?
答案 0 :(得分:3)
您正在尝试查找给定数字集中数字之间的最小和最大差异。并且您正在将min
和max
初始化为数字num
集合的第一个元素。
由于您正在比较数字与min
和max
之间的后续差异,因此在两种情况下将无法使用:
a)如果数字之间的最小差比nums
的第一个元素多
b)如果数字之间的最大差小于nums
要使其正常工作:
min
初始化为尽可能高的整数,例如INT_MAX
。 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),并进行比较。
您可以使用函数从虚拟数组中获取元素,但是在这种情况下,它会显得过分膨胀。