【发布时间】:2019-11-16 02:05:55
【问题描述】:
我需要从数组中删除所有最小值和最大值,但我不知道该怎么做。
首先我创建一个数组,例如,由 5 个数字组成。然后我输入数字,比如 1、2、3、4、5。然后我找到最小值和最大值,即 1 和 5,很简单。然后我需要删除它们,这就是我卡住的地方。
这里是代码:(循环倒数第二个是相关部分)
int main()
{
int i;
int n;
int min=999999;
int max=-999999;
cout<<"Enter how many elements there will be in the array"<<endl;
cin>>n;
int array[n];
for(i=0;i<n;i++)
{
cout<<"Enter element "<<i+1<<endl;
cin>>array[i];
}
for(i=0;i<n;i++)
{
if(array[i]<min)
{
min=array[i];
}
if(array[i]>max)
{
max=array[i];
}
}
for(i=0;i<n-1;i++)
{
if(array[i]==min||array[i]==max)
{
for(i=0;i<n-1;i++)
{
array[i]=array[i+1];
}
array[n-1]=0;
n--;
}
}
for(i=0;i<n;i++)
{
cout<<"Array after min and max values deleted: "<<array[i]<<endl;
}
return 0;
}
我在想的是它应该通过一个 for 循环遍历数组,如果它找到最小值或最大值,它应该删除它,但由于某种原因它不能那样工作。它只删除第一个值,仅此而已。任何帮助将不胜感激。
【问题讨论】:
-
使用
std::vector,而不是 C 风格的数组。使用Erase-Remove idiom。 -
`int array[n];`错了,应该是
int *array = new int[n]; -
您不能删除数组中的项目。你可以覆盖它。覆盖数组中的元素不会改变数组的容量。
-
还有
for(i=0;i<n-1;i++)循环错误应该是for(k=i;k<n-1;k++) -
这里的“k”是什么?