1378 求三个数组中的共同元素 C语言

来源:互联网 发布:linux 匹配文件内容 编辑:程序博客网 时间:2024/05/17 22:55

问题 G: 求共同元素(数组)

时间限制: 1 Sec 内存限制: 128 MB
提交: 251 解决: 80
[提交][状态][讨论版]

题目描述
输入三个数组,求三个数组中的共同元素。要求算法的时间复杂度尽可能小。
提示:可使用C++排序函数sort。头文件:algorithm.h。

输入
测试次数t
每组测试数据三行,分别为三个数组的数据,格式如下:
数组大小n,后跟n个数据

输出
输出每组测试数据的共同元素个数和共同元素(升序顺序输出)。如果没有,仅输出0:。

样例输入
2
4 43 1 6 89
3 12 4 43
8 34 1 2 6 43 56 90 8
5 1 2 3 4 8
8 10 2 43 546 2 43 8 20
4 50 40 2 8

样例输出
1:43
2:2 8

#include<stdio.h>int main() {    void sort(int *a, int l);    int t,a[25],b[25],c[25];    int i,j,k,m,n[25],num,value[25],valueP[25];    scanf("%d",&t);    while(t--) {        for(i=0; i<3; i++) {            scanf("%d",&n[i]);            switch(i) {                case 0:                    for(j=0; j<n[i]; j++) {                        scanf("%d",&a[j]);                    }                    break;                case 1:                    for(j=0; j<n[i]; j++) {                        scanf("%d",&b[j]);                    }                    break;                case 2:                    for(j=0; j<n[i]; j++) {                        scanf("%d",&c[j]);                    }                    break;            }        }        //sort        sort(a,n[0]);        sort(b,n[1]);        sort(c,n[2]);        num =0;        //bianli        for(i=0; i<n[0]; i++) {            for(j=0; j<n[1]; j++) {                for(k=0; k<n[2]; k++) {                    if(a[i]==b[j]&&a[i]==c[k]) {                        value[num]=a[i];                        num++;                    }                }            }        }        if(num==0) {            printf("0:\n");        } else {            //value qu chong            if(num!=1) {                for(i=0,j=0; i<num; j++,i++) {                    if(i==0&&j==0) {                        valueP[i]=value[j];                    } else if(valueP[i-1]==value[j]) {                        num--;                        i--;                    } else {                        valueP[i]=value[j];                    }                }            } else {                //num ==1                valueP[0]=value[0];            }            printf("%d:",num);            for(i=0; i<num; i++) {                if(i==num-1) {                    printf("%d\n",valueP[i]);                } else {                    printf("%d ",valueP[i]);                }            }        }    }    return 0;}void sort(int a[], int l) {     int i, j;    int v;    for(i = 0; i < l - 1; i ++) //mao pao fa        for(j = 0; j < l-i-1; j ++) {            if(a[j] > a[j+1]) { 。                v = a[j];                a[j] = a[j+1];                a[j+1] = v;            }        }}/**************************************************************    Problem: 1378    Language: C++    Result: 正确    Time:0 ms    Memory:800 kb****************************************************************/