刪除重複數據和刪除所有重複數據不同處理方法

仔細想才發現處理過程是不一樣的,刪除重複數據要刪除後面重複的保留第一個,刪除所有的是把包括第一次出現的一起刪除了。不知道有沒有理解對。下面是一次作業的代碼,比較懶沒有把和刪除無關的部分截掉。
// 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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章