我试图用C来做一个程序,它必须搜索向量的最小值但是我做错了。使用向量中的数字1,2,3,4,5它可以正常工作,但是当我尝试使用数字:22,72,123,45,81时,它告诉我最小值为45。 / p>
#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 :(得分:2)
您只从矢量中挑选两个元素来比较它们:
if(vector[i]<vector[i-1]){
因此条件只给出这两个中的最小值,而不是整个数组的值。
将您的条件更改为
if(vector[i]<min){
,您的代码将按预期运行。
答案 1 :(得分: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];
}
考虑到标题std::min_element
中声明的标准算法<algorithm>
执行此任务。