刪除重複資料和刪除所有重複資料不同處理方法
阿新 • • 發佈:2019-01-02
仔細想才發現處理過程是不一樣的,刪除重複資料要刪除後面重複的保留第一個,刪除所有的是把包括第一次出現的一起刪除了。不知道有沒有理解對。下面是一次作業的程式碼,比較懶沒有把和刪除無關的部分截掉。
// 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; }