我试图让我用数字读取数组并获得较小的数字,将其存储在变量中,然后将其与另一个来自其他两个数字(如2,-3)的变量进行比较。
我实现do while循环的方式有问题。我需要柜台'我'要更新两次以便它通过我有4个比较数字的2个新变量。当我硬编码n-1时,n-2它可以工作,但是在循环中它会卡在一个值上。
int i=0;
int closestDistance=0;
int distance=0;
int nextDistance=0;
do
{
distance = std::min(values[n],values[n-i]); //returns the largest
distance=abs(distance);
i++;
nextDistance=std::min(values[n],values[n-i]);
nextDistance=abs(closestDistance); //make it positive then comp
if(distance<nextDistance)
closestDistance=distance;//+temp;
else
closestDistance=nextDistance;
i++;
}
while(i<n);
return closestDistance;
答案 0 :(得分:0)
你想在以下几行做什么。
nextDistance=std::min(values[n],values[n-i]);
nextDistance=abs(closestDistance); //make it positive , then computed
答案 1 :(得分:0)
也许这个:
int i = 0;
int m = 0;
do{
int lMin = std::min(values[i],values[i + 1]);
i += 2;
int rMin = std::min(values[i], values[i + 1]);
m = std::min(lMin,rMin);
i += 2;
}while(i < n);
return m;
我不明白你的意思,但是这会一次比较values
4中的值来找到最小值。这就是你所需要的吗?
请注意,如果n
是值的大小,则会超出范围。 n
必须是大小减去4,导致奇怪的异常情况。
您的问题可能出在abs
的电话中。所有价值观都是积极的吗?你想找到最小的绝对值吗?
另请注意,使用i += 2
两次可确保您不会重复任何值。这意味着您将获得4个唯一值。您的代码在循环的每次迭代中都会经过3次。
我希望这澄清了。