仔细想才发现处理过程是不一样的,删除重复数据要删除后面重复的保留第一个,删除所有的是把包括第一次出现的一起删除了。不知道有没有理解对。下面是一次作业的代码,比较懒没有把和删除无关的部分截掉。
// a01101.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
//给定一个整型数组:
//–int data[20] = { 12, 3, 5, 7, 23, 65, 4, 7, 22, 11, 78, 146, 13, 3,
//–98, 4, 7, 19, 76, 12 }
//•要求:
//–删除重复数据
//–按照升序进行冒泡排序(或其它排序算法)并输出最终结果
//–输出如下:
//•原始数据:…….
//•重复数据:…….
//•升序排序后数据:……
int _tmain(int argc, _TCHAR* argv[])
{
void showdata(int [], int);
int* repeatdata(int[], int[], int);
void sort(int [], int);
int rawdata[20] = { 12, 3, 5, 7, 23, 65, 4, 7, 22, 11, 78, 146, 13, 3, 98, 4, 7, 19, 76, 12 };
int size = sizeof(rawdata) / sizeof(rawdata[0]);/*
printf("%d\n", size);*/
printf("the raw data are:\n");
showdata(rawdata, size);
int *nonrepeatdata=new int[size];
nonrepeatdata = repeatdata(rawdata, nonrepeatdata, size);
sort(nonrepeatdata, size);
delete[] nonrepeatdata;
return 0;
}
void showdata(int rawdata[], int size){ /*
int size = sizeof(a)/sizeof(a[0]);*//*
printf("%d\n", size);*/
for (int i = 0; i < size; i++){
if (rawdata[i] != -1){
printf("%d", rawdata[i]);
if (i < size - 1)
printf(",");
}
}
printf("\n");
printf("------------------------------------------------------------");
printf("\n");
}
int* repeatdata(int rawdata[], int nonrepeatdata[], int size){
int *repeatdata = new int[size];
for (int i = 0; i < size; i++){
repeatdata[i] = -1;
nonrepeatdata[i] = -1;
}
int repeatcnt = 0, nonrepeatcnt = 0;
for (int i = 1; i < size; i++){
for (int j = 0; j < i; j++){
if (rawdata[i] == rawdata[j]){
for (int k = 0; k <= repeatcnt; k++){
if (rawdata[j] == repeatdata[k])
break;
else{
repeatdata[repeatcnt] = rawdata[j];
repeatcnt++;
break;
}
}
break;
}
else if (j == i - 1){
nonrepeatdata[nonrepeatcnt] = rawdata[i];
nonrepeatcnt++;
}
}
}
nonrepeatdata[nonrepeatcnt] = rawdata[0];
nonrepeatcnt++;
printf("there are %d repeated datas:\n", repeatcnt);
showdata(repeatdata, size);/*
showdata(nonrepeatdata, nonrepeatcnt);*/
delete[] repeatdata;
return nonrepeatdata;
}
void sort(int rawdata[], int size){
for (int i = 0; i < size; i++){
for (int j = i + 1; j < size; j++){
if (rawdata[i] > rawdata[j]){
int temp = rawdata[i];
rawdata[i] = rawdata[j];
rawdata[j] = temp;
}
}
}
printf("the nonrepeated sorted data are:\n");
showdata(rawdata, size);
}
// a01102.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <vector>
using namespace std;/*
•P.438 #13
•函数removeDup()把向量对象作为参数,并删除所有重复元素
–给定输入:int N[] = { 1, 10, 4, 1, 5, 8, 2, 5, 10, 6, 7, 4 };
–void removeDup(vector <int> &v)
•编写用数组值初始化的向量程序,计算平均值,然后输出每个数值相对于平均值的波动(+/ -)
–int arr[] = { 1, 6, 2, 9, 12, 15, 33, 28 };*/
#define NUM1 100
int _tmain(int argc, _TCHAR* argv[])
{
void removeDup(vector <int>&);
void analyse(vector<int>&);
vector<int> v1, v2, v3;
vector<int>::iterator it1;
for (int i = NUM1 - 1; i >= 0; i--)
v1.push_back(i);/*
for (int i = 0; i < NUM1; i++)
printf("%d ", v1[i]);*//*
printf("the inverted ordered sequence is:\n");
for (it1 = v1.begin(); it1 != v1.end(); it1++)
printf("%d ", *it1);*//*
printf("\n");
printf("------------------------------------------------------");
printf("\n");*/
int N[] = { 1, 10, 4, 1, 5, 8, 2, 5, 10, 6, 7, 4 };
int size = sizeof(N) / sizeof(N[0]);
for (int i = 0; i < size; i++)
v2.push_back(N[i]);/*
for (int i = 0; i < size; i++)
printf("%d ", v2[i]);*/
printf("\n");
printf("------------------------------------------------------");
printf("\n");
removeDup(v2);
printf("\n");
printf("------------------------------------------------------");
printf("\n");
int arr[] = { 1, 6, 2, 9, 12, 15, 33, 28 };
size = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < size; i++)
v3.push_back(arr[i]);/*
printf("%d", size);
for (int i = 0; i < size; i++)
printf("%d ", v3[i]);*/
analyse(v3);
return 0;
}
void removeDup(vector <int> &v){
vector<int>::iterator it;/*
printf("%d ", v.size());*/
vector<int> vnonrepeat;
int size = v.size();
vector<int> vnote(size);
for (int i = 1; i < size; i++){
for (int j = 0; j < i; j++){
if (v[i] == v[j]){
vnote[i] = 1;
vnote[j] = 1;
}
}
}
for (int i = 0; i < size; i++){
if (vnote[i] == 0)
vnonrepeat.push_back(v[i]);
}
for (it = vnonrepeat.begin(); it != vnonrepeat.end(); it++)
printf("%d ", *it);
return;
}
void analyse(vector<int>& v){
float aver(vector<int>&);
float ave = aver(v);
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++){
if (*it < ave)
printf("-%.2f ", ave - *it);
else
printf("+%.2f ", *it - ave);
}
}
float aver(vector<int>& v){
int size = v.size();
float sum = 0;
for (int i = 0; i < size; i++)
sum += v[i];
/*
printf("%d ", size);
printf("%f ", sum );
printf("%f ", sum / size);*/
return sum / size;
}