set函数去重c语言 set对象怎么去重

c语言问题数组去重

#include stdio.h

临泉ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

int main()

{

int m, n, i, cur, pre;

scanf("%d", m);

while (m--)

{

scanf("%d", n);

scanf("%d", cur);

pre = cur;

printf("%d ", cur);

for (i = 1; i  n; i++)

{

scanf("%d", cur);

if (cur != pre)

{

pre = cur;

printf("%d ", cur);

}

}

printf("\n");

}

return 0;

}

c语言中一个一维数组怎样去重?

可以定义两个数组,将原来数组的不重复的数放到新数组中就可以了.(如果需要也可以释放原来数组的内存)#include stdio.h main() { int a[5]={1,1,2,1,2}; int i,j,k=0, b[5]={0}; for(i=0;i=4;i++) for(j=0;j=4;j++) if(a[i]!=b[j]) {b[k]=a[i];k++;} printf("去重后的数组为:"); for(i=0;i=k-1;i++) printf("a[i]=%d",a[i]); }

数组去重排序c语言

#includestdio.h

int main(){

int a[10];

for(int i=0;i10;i++){

scanf("%d",a[i]);

}

/*冒泡升序*/

for(int i=0; i10-1; i++){

for(int j=0; j10-1-i; j++){

if(a[j]a[j+1]){

int t = a[j];

a[j] = a[j+1];

a[j+1] = t;

}

}

}

int index=1;//下标

int b[10];//存放不重复元素的数组

b[0] = a[0];

for(int i=1;i10;i++){

if(a[i] != a[i-1]){//如果当前遍历的元素和前一个元素不相等

b[index++] = a[i];//存到b中

}

}

for(int i=0;iindex;i++){

printf("%d\n",b[i]);

}

}

c语言如何对数字进行排序和去重

#include iostream

#include stdio.h

#include set

using namespace std;

int main()

{

int n,a,i;

setintm;

while(scanf("%d",n)!=EOF)

{

for(i=0;in;i++)

{

scanf("%d",a);

m.insert(a);

}

setint::iterator it;

printf("%d\n",m.size());

for(it=m.begin();it!=m.end();it++)

{

if(it==m.begin())

printf("%d",*it);

else

printf(" %d",*it);

}

printf("\n");

m.clear();

}

return 0;

}

删除数组中相同的数据元素 C语言 比如1 1 1 1 1 2 2 3 1 1 4 结果是1 2 3 4

修订版:

#include stdio.h

#include stdlib.h

#include string.h

typedef int T;

// 打印数组

void Print(T* beg, T* end, const char* msg)

{

printf(msg);

while(beg != end)

printf("%d ", *beg++);

putchar('\n');

}

// 把元素向左移以覆盖重复元素

void MoveUp(T* dest, T* src, T* end)

{

while(src != end)

*dest++ = *src++;

}

// 去重

T* Unique(T* beg, T* end)

{

T* dupBeg = end;

if(end - beg = 1)

return end;

while(++beg != end)

{

if(*(beg - 1) == *beg)

{

dupBeg = beg;

while(*++dupBeg == *(dupBeg - 1) dupBeg != end);

if(dupBeg == end)

return beg;

else

{

MoveUp(beg, dupBeg, end);

end -= dupBeg - beg;

}

}

}

return end;

}

// 求差集

T* SetDiff(T* a, T* endOfA, T* b, T* endOfB, T* c)

{

T* p;

for(; a != endOfA; ++a)

{

for(p = b; p != endOfB; ++p)

if(*p == *a)

break;

if(p == endOfB)

*c++ = *a;

}

return c;

}

inline int Cmp(const void* lhs, const void* rhs)

{

return *(const T*)lhs - *(const T*)rhs;

}

int main()

{

// 只是个示例,元素个数很多的话可以用动态数组

T a[] = , *endOfA = a + sizeof(a) / sizeof(a[0]);

T b[] = , *endOfB = b + sizeof(b) / sizeof(b[0]);

T* c, *endOfC;

// 排序

qsort(a, endOfA - a, sizeof(T), Cmp);

qsort(b, endOfB - b, sizeof(T), Cmp);

// 去重

endOfA = Unique(a, endOfA);

endOfB = Unique(b, endOfB);

Print(a, endOfA, "Set A: ");

Print(b, endOfB, "Set B: ");

// c = a - b;

c = (T*)malloc(sizeof(T) * (endOfA - a));

endOfC = SetDiff(a, endOfA, b, endOfB, c);

Print(c, endOfC, "Difference of A B: ");

free(c);

return 0;

}

这样的话用C++更简单,直接set_difference:

#include iostream

#include list

#include algorithm

#include iterator

using namespace std;

int main()

{

int a[] = ;

int b[] = ;

listint la(a, a + 6);

listint lb(b, b + 5);

listint lc;

// 排序

la.sort();

lb.sort();

// 去重

la.unique();

lb.unique();

// 求差集,存在lc中

set_difference(la.begin(), la.end(), lb.begin(), lb.end(), back_inserter(lc));

// 打印

copy(lc.begin(), lc.end(), ostream_iteratorint(cout, " "));

}

至于存储数据的数据结构,list,deque都是理想的选择,vector不太适合,因为你的数据量比较大,其他的就不用我说了吧,数据结构 + algorithm 就可以了,STL的算法和数据结构效率应该够高了吧,思路给你,具体的地方需要的话自己改一下。

如果嫌list是占用空间大的话可以用deque,但是unique和sort等方法就必须使用algorithm中的了,还有别忘了erase。


分享标题:set函数去重c语言 set对象怎么去重
当前网址:http://ybzwz.com/article/hhjddh.html