有没有大佬告诉我哪错了
原题链接:463.删除数字2024-11-24 16:13:58
发布于:江苏
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
int m;
cin>>m;
for(int i=0;i<n;i++){
if(a[i]==m) continue;
else cout<<a[i]<<" ";
}
}
全部评论 2
你的代码逻辑基本上是正确的,但在处理删除操作时有一些问题。具体来说,你的代码会跳过所有等于 m 的元素,而不是只删除第一个出现的 m。此外,数组的大小在 C++ 中应该是常量,不能用变量定义数组大小。为了修复这些问题,我们可以使用 std::vector 来动态管理数组,并且只删除第一个出现的 m。下面是修正后的代码:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } int m; cin >> m; // 找到第一个出现的 m 的位置 auto it = find(a.begin(), a.end(), m); // 如果找到了 m,则删除它 if (it != a.end()) { a.erase(it); } // 输出剩余的元素 for (int i = 0; i < a.size(); i++) { cout << a[i] << " "; } cout << endl; return 0; }
代码解释
- 输入部分:
•首先读取数组的大小 n 和数组的元素。
•然后读取要删除的元素 m。 - 删除操作:
•使用 find 函数找到第一个出现的 m 的位置。
•如果找到了 m,则使用 erase 方法删除它。 - 输出部分:
•遍历并输出删除 m 后的数组元素。
注意事项
•使用 std::vector 可以避免固定数组大小的问题,并且提供了方便的动态管理功能。
•find 函数用于查找元素,erase 方法用于删除元素。
这样修改后,代码将正确删除第一个出现的 m 并输出剩余的元素。内容由AI生成
1周前 来自 浙江
1- 输入部分:
bro第一次出现,你是每次都删一遍
1周前 来自 上海
0谢谢大佬
1周前 来自 江苏
0那代码是什么呢
1周前 来自 江苏
0用flag记录,其他自己想
1周前 来自 上海
0
有帮助,赞一个