#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;
}
可以定义两个数组,将原来数组的不重复的数放到新数组中就可以了.(如果需要也可以释放原来数组的内存)#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]); }
#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]);
}
}
#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;
}
修订版:
#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。