本题要求编写程序,找出给定的n个数中的最小值及其对应的最小下标(下标从0开始)。
输入格式:
输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出最小值及最小值的最小下标,中间用一个空格分开。
输入样例:
6
2 9 -1 8 -1 6
输出样例:
-1 2
代码长度限制16 KB
时间限制400 ms
内存限制64 MB
栈限制8192 KB
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int min;
cin>>min;
int mini=0;
for(int i=1;i<n;i++)
{
int a;
cin>>a;
if(a<min)
{
min=a;
mini=i;
}
}
cout<<min<<" "<<mini<<endl;
}
其他解法
方法一:简单遍历
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int nums[n];
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
int minVal = nums[0];
int minIndex = 0;
for (int i = 1; i < n; ++i) {
if (nums[i] < minVal) {
minVal = nums[i];
minIndex = i;
}
}
cout << minVal << " " << minIndex << endl;
return 0;
}
思路:首先读取输入的整数个数n和n个整数到数组nums中。初始化最小值minVal为数组的第一个元素,最小下标minIndex为 0。然后遍历数组,从第二个元素开始,如果当前元素小于minVal,则更新minVal和minIndex。最后输出最小值和最小下标。
方法二:使用std::min_element函数(需要包含<algorithm>头文件)
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int nums[n];
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
auto minIt = min_element(nums, nums + n);
cout << *minIt << " " << (minIt - nums) << endl;
return 0;
}
思路:先读取输入数据到数组nums中。然后使用std::min_element函数找到数组中的最小值的迭代器minIt,通过*minIt获取最小值,通过minIt - nums计算出最小值在数组中的下标。最后输出结果。
方法三:设置标志位
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int nums[n];
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
bool first = true;
int minVal, minIndex;
for (int i = 0; i < n; ++i) {
if (first || nums[i] < minVal) {
minVal = nums[i];
minIndex = i;
first = false;
}
}
cout << minVal << " " << minIndex << endl;
return 0;
}
思路:读取输入数据后,设置一个标志位first,初始为true。遍历数组时,如果是第一次遍历或者当前元素小于当前记录的最小值,就更新最小值minVal和最小下标minIndex,并将first设为false。最后输出最小值和最小下标。