给定一个数组,其中每个元素出现两次,除了一对(两个元素)。找到这个唯一对的元素。
输入:
第一行输入包含一个表示测试用例数的整数T。然后T测试用例如下。每个测试用例由两行组成。每个测试用例的第一行包含整数N表示数组的大小,第二行包含N个空格分隔元素。
输出:
对于每个测试用例, 在新行中以增加的顺序打印唯一对。
约束:
1 <= T <= 100
1 <= N <= 10 3
1 <= A [i] <= 10 3
示例:
输入:
2
6
2 2 5 5 6 7
4
1 3 4 1
输出:
6 7
3 4
这个题算是最简单的一个题目,写下我的解题思路。
核心在于怎么找出来这一对元素:假设数组存放在b数组中,因为数组元素的大小是1-1000,所以新建数组a使其大小是1000,初始化为0。
依次将b中元素对应于a中的下标进行递增。如果最终a中是奇数的就是目标答案。只需要遍历一遍就可以了。
下面是具体代码实现:
#include <stdio.h> #include <stdlib.h> int main() { int n;//具体执行几次 scanf("%d",&n); int *num=(int*)malloc(sizeof(int)*n);//num数组存放每个数组的大小. int i,j;//i是循环变量 ;i<n;i++) { scanf("%d\n",&num[i]);//读入第i个数组元素的个数。 int *b=(int*)malloc(sizeof(int)*num[i]);//分配b数组空间 ;j<num[i];j++) scanf("%d",&b[j]);//依次读入数组元素. ]={};//初始化为0 ;j<num[i];j++) a[b[j]-]++;//对数组a,b进行处理。 ;j<;j++) { ==) printf()); } printf("\n"); } ; }
如果存在任何不理解,请留言。