2017-02-27 80 views
-2

我试图做一个程序与C必须搜索矢量的最小值,但我做错了什么。随着向量中的数字1,2,3,4,5它正常工作,但是,当我用数字来试试它时:22,72,123,45,81它对我说最小的一个是45.搜索最小值

#include <iostream> 
using namespace std; 
const int MAX= 5; 

int main(){ 
    int vector[MAX], i=0; 
    for(i=0;i<MAX;i++){ 
     cin>>vector[i]; 
    } 
    int min=vector[0], posicio; 
    for(i=1;i<MAX;i++){ 
     if(vector[i]<vector[i-1]){ 
      min=vector[i]; 
      posicio= i; 
     } 
    } 
    cout<<min<<"#"<<posicio<<endl; 
    return 0; 
} 
+0

我猜你的意思是C++?你将它标记为C++,使用一些C++特性,但你说C. – jready

+0

如果你用C语言编程,你为什么要用C++标签? – curiousguy

+5

拿张纸和铅笔,并检查发生在你的第二个循环 - 然后解决方案将是显而易见的.... – PiotrNycz

回答

2

你只选择两个元素从向量比较这些:

if(vector[i]<vector[i-1]){ 

使病情只给你最小的两个,而不是整个数组。

更改条件

if(vector[i]<min){ 

,并如预期的代码运行。

1

首先变量posicio未被初始化。所以在一般情况下,该程序具有未定义的行为。

其次,您正在查找向量中的最后一个元素,以使条件vector[i]<vector[i-1]为真。事实上该序列 22,72,123,45,81这样的元素是45

如果你需要找到的最小元素YPU应该写

int min=vector[0], posicio = 0; 
        ^^^^^^^^^^^ 
for(i=1;i<MAX;i++){ 
    if(vector[i] < min){ 
    ^^^^^^^^^^^^^^^^^^^^^ 
     min=vector[i]; 
     posicio= i; 
    } 
} 

如果您只需要确定该阵列的最小元素的位置,然后你可以写

int posicio = 0; 

for (i = 1; i < MAX; i++){ 
    if(vector[i] < vector[posicio}){ 
     posicio = i; 
    } 
} 

而且它没有意义的声明变量i环路以外。

所以,你可以删除这个声明

int vector[MAX], i=0; 
        ^^^^^ 

和写入例如

for (int i = 0;i < MAX; i++){ 
    cin >> vector[i]; 
} 

要考虑到有在头<algorithm>执行此任务宣告标准算法std::min_element