程序题, 20.0分) 删除整数:假设整数数组a[10]中,存在与整数x相同的数据,其中数组a和x均为用户输入,则完成以下功能: (1)将数组a中与x相同的所有数据,除第一个之外,全部删除;如
时间: 2024-05-14 10:16:17 浏览: 30
下面是一个可能的解决方案:
```c++
#include <iostream>
using namespace std;
int main() {
int a[10], x; // 定义数组a和整数x
int count = 0; // 统计与x相同的数据出现次数
cout << "请输入整数x:" << endl;
cin >> x;
cout << "请输入数组a:" << endl;
for (int i = 0; i < 10; i++) {
cin >> a[i];
if (a[i] == x) {
count++;
}
}
// 如果数组中没有与x相同的数据,则无需删除
if (count == 0) {
cout << "数组中没有与" << x << "相同的数据" << endl;
return 0;
}
// 如果数组中只有一个与x相同的数据,则无需删除
if (count == 1) {
cout << "数组中只有一个与" << x << "相同的数据" << endl;
return 0;
}
// 删除数组中与x相同的数据
int j = 0; // j指向当前遍历到的元素
for (int i = 0; i < 10; i++) {
if (a[i] != x) { // 如果当前元素与x不同,就将其移到j指向的位置
a[j] = a[i];
j++;
} else if (j == i) { // 如果当前元素与x相同,且为第一个相同的元素,就不移动
j++;
}
}
// 输出删除后的数组
cout << "删除后的数组为:" << endl;
for (int i = 0; i < j; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
```
这个程序的主要思路是先遍历一遍数组,统计与x相同的数据出现次数。如果出现次数为0,则无需删除;如果出现次数为1,则无需删除;否则就需要遍历一遍数组,将所有与x相同的数据除第一个之外全部删除。删除时需要用一个指针j来指向当前遍历到的元素,如果当前元素与x不同,就将其移到j指向的位置,并将指针j加1;如果当前元素与x相同,且为第一个相同的元素,就不移动。最后输出删除后的数组即可。