正在研究此问题,并且在找出问题所在时遇到困难。
5表示列表中有五个值,即30、50,10、70和65。10是列表中的最小值,因此减去从列表中的每个值。
输入:5 30 50 10 70 65
我的输出:20 40 0 70 65
预期输出:20 40 0 60 55
我的代码:
#include <iostream>
using namespace std;
int MAX_ELEMENTS = 20;
int GetMinimumInt(int listInts[], int numVals);
int main() {
cin >> MAX_ELEMENTS;
int userVals[MAX_ELEMENTS];
int i;
// populating the variable
for (i = 0; i < MAX_ELEMENTS; ++i) {
cin >> userVals[i];
}
// output values
for (i = 0; i < MAX_ELEMENTS; ++i) {
cout << userVals[i] - GetMinimumInt(&userVals[i], MAX_ELEMENTS) << " ";
}
cout << endl;
return 0;
}
int GetMinimumInt(int listInts[], int numVals) {
int minValFun = listInts[1]; // smallest so far
for (int i = 0; i < MAX_ELEMENTS; ++i) {
if (listInts[i] < minValFun) {
minValFun = listInts[i];
}
}
return minValFun;
}
由于参数错误,将在GetMinimumInt
中发生超范围访问。
您将不必为数组偏移:您应该使用GetMinimumInt(userVals, MAX_ELEMENTS)
而不是GetMinimumInt(&userVals[i], MAX_ELEMENTS)
。
也
int minValFun = listInts[1]; // smallest so far
在功能GetMinimumInt
中应该是
int minValFun = listInts[0]; // smallest so far
以支持一元数组。