我创建了这个程序:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> m(n);
for(int i=0;i<n;i++){
cin>>m[i];
}
sort(m.begin(),m.end());
vector<bool> used(n,false);
for(int i=n;i>0;i--){
for(int j=i;j>0;j--){
if((m[i]/m[j]>=2)&&(used[i]==false))
used[j]=true;
}
}
int numOfElem=0;
for(int i=0;i<n;i++){
if(used[i]!=true){
numOfElem++;
}
}
cout<<"\n"<<numOfElem<<"\n";
return 0;
}
现在由于某种原因,在我输入向量 m 的元素后,我的命令终止了,有没有人知道这个问题的原因?
答案 0 :(得分:2)
自从您开始使用 m
(向量的大小)进行迭代以来,您越界访问了向量 used
和 i == n
。这会导致您的程序出现未定义行为,而崩溃是一种可能的结果。
建议修复:
for(int i = n - 1; i >= 0; i--) { // start with n-1 and ...
for(int j = i; j >= 0; j--) { // ... include 0 in the loop
另请注意,m[i] / m[j]
可能是被零除并抛出异常,因此您可能需要在除法之前检查 m[j] == 0
是否也如此。