如何在数组中找到最小编号的索引号?

How to find the index No. of mininum no. in an array?

本文关键字:编号 索引 数组      更新时间:2023-10-16

只有当最小数是奇数时,我才必须打印出最小数的索引。我有代码,但我得到错误的答案?这是完整的代码

#include <iostream>
using namespace std;
int main()
{ 
int array[8] = { 0, 0, 0, 0, 0, 0, 0, 0};  
int min = array[0]; 
int max = array[0]; 
int indexOfMin = 0; 
int indexOfMax = 0; 
int found = 0; 
cout << "Enter the array: "; 
int k;
for(k = 0; k <= 7; k++){ 
cin >> array[k];
}
for (int i = 0; i < 7; i++){
if(array[i] <= min){
min = array[i];
indexOfMin = i;
}
}
for (int i = 1; i < 8; i++){
if(array[i] % 2 != 0){
found = (array[indexOfMin] % 2) != 0;
}
else{
found = 0;
}
}
if(found == (array[indexOfMin] % 2) != 0){
cout << indexOfMin << min << endl;
}
else{
cout << "not found";
}
return 0;
}

我认为问题出在最后cout

0, 5, 9, 1, 2, 9, 1, 3

.对于这个给定的数组,答案应该是 3 和 6

您的问题是,如果任何数字是奇数,则打印最小值。

for (int i = 0; i < 7; i++){
if(array[i] % 2 != 0){
found == 1;
}
}

此代码查看数组中的每个数字,如果其中任何一个是奇数,则设置标志。您只需要检查一个数字。因此,您可以将上面的代码替换为以下内容:

found = (array[indexOfMin] % 2) != 0;

或更优雅

found = array[indexOfMin] & 1;

。假设您实际上找到了一个值,如果您没有正确初始化min,就不会发生这种情况。从您的示例中,看起来min已初始化为零。您应该使用较大的数字(例如INT_MAX(来确保array[0]始终小于min,或者在初始化后显式将min设置为array[0],然后跳过测试array[0]

注意:目前,您的代码包含一个额外的错误。如果要将min初始化为array[0]则需要在array[0]包含有效数据之后执行此操作,而不是事先。如果用户输入8 7 6 5 4 3 2 1,编写的代码将打印错误的索引。