【问题描述】有16个数:{1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10},已按由小到大的顺序排好,存于数组a中,试建立一个类ARR,完成将其中相同的数删得只剩一个。经删除后,a数组中的内容 为{1,2,3,4,5,6,7,8,9,10},具体要求如下:
(1) 私有数据成员
int n: 数组实际元素个数。
int a[100]:存放原始数组及结果数组。
(2) 公有成员函数
ARR(int x[ ], int size):构造函数,用size初始化n,用x初始化a数组。
void delsame():完成数组a中相同元素的删除工作。
void show(): 将结果数组以每行10个数的形式输出到屏幕上。
(3) 在主程序中定义数组int b[16],初值如上。定义一个类ARR的对象v,用b及数组元素的个数初始化该对象,然后按上述要求完成对该类的测试。
【输入形式】无
【输出形式】输出数组对象删除重复元素前和删除重复元素后的数据。
【样例输入】无
【样例输出】
删除前: 1 2 2 3 4 4 5 6 6 7
8 8 8 9 10 10
删除后: 1 2 3 4 5 6 7 8 9 10
#include <iostream>
#include<iomanip>
using namespace std;
class ARR {
private:
int n; // 数组实际元素个数
int a[100]; // 存放原始数组及结果数组
public:
ARR(int x[], int size) { // 构造函数,用size初始化n,用x初始化a数组
n = size;
for (int i = 0; i < n; i++) {
a[i] = x[i];
}
}
void delsame(); // 删除相同元素
void show(); // 输出结果数组
};
void ARR::delsame() {
int j = 0; // j表示不同元素的下标
for (int i = 1; i < n; i++) {
if (a[i] != a[j]) { // 如果当前元素与不同元素不同,就将其放到不同元素后面
a[++j] = a[i];
}
}
n = j + 1; // 更新实际元素个数
}
void ARR::show() {
for (int i = 0; i < n; i++) {
cout <<setw(5)<< a[i] << " ";
if ((i + 1) % 10 == 0) cout << endl; // 每行输出10个数
}
cout << endl;
}
int main() {
int b[16] = {1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10};
ARR v(b, 16);
cout << "删除前:" << endl;
v.show();
v.delsame();
cout << "删除后:" << endl;
v.show();
return 0;
}