C/C++ 统计两个数组中不同元素的个数

原创 2016年08月30日 11:18:46

C/C++ 统计两个数组中不同元素的个数

//统计两个数组中不同元素的个数

//数组中不含重复元素
#include "stdafx.h"
#include "stdio.h"
#include"stdlib.h"
#include<iostream>

using namespace std;

int Match2Array(int * pArray1, int len1, int * pArray2, int len2)
{
	for (int i = 0; i < len1-1; i++)
	{
		for (int j = 0; j < len1-i-1; j++)
		{
			if (pArray1[j]>pArray1[j + 1])
			{
				int temp = pArray1[j];
				pArray1[j] = pArray1[j + 1];
				pArray1[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < len2 - 1; i++)
	{
		for (int j = 0; j < len2 - i - 1; j++)
		{
			if (pArray2[j]>pArray2[j + 1])
			{
				int temp = pArray2[j];
				pArray2[j] = pArray2[j + 1];
				pArray2[j + 1] = temp;
			}
		}
	}
	//至此,两个数组都变成了有序数组,从小到大排列
	int *p1 = pArray1 + len1;
	int *p2 = pArray2 + len2;
	int num = 0;//相同元素的个数

	while (pArray1 < p1&&pArray2 < p2)
	{
		if (*pArray1 == *pArray2)
		{
			num++;
			pArray1++;
			pArray2++;
		}
		else if (*pArray1 < *pArray2)
		{
			pArray1++;
			continue;
		}
		else
		{
			pArray2++;
			continue;
		}
	}
	return len1 + len2 - 2 * num;

}
int main()
{
	int f[4] = { 1, 3, 4, 7 };
	int g[5] = { 2, 3, 5, 7, 8 };
	int size=Match2Array(f, 4, g, 5);

	cout << size << endl;

	return 0;
}

//只含一个重复元素时
#include "stdafx.h"
#include "stdio.h"
#include"stdlib.h"
#include<iostream>

using namespace std;

//统计数组中相同元素的个数
int *reNum(int *p, int size)
{
	int arr[10] = { 0 };

	for (int i = 0; i < size;i++)
	{
		arr[p[i]]++;
	}
	return arr;
}
int Match2Array(int * pArray1, int len1, int * pArray2, int len2)
{
	for (int i = 0; i < len1 - 1; i++)
	{
		for (int j = 0; j < len1 - i - 1; j++)
		{
			if (pArray1[j]>pArray1[j + 1])
			{
				int temp = pArray1[j];
				pArray1[j] = pArray1[j + 1];
				pArray1[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < len2 - 1; i++)
	{
		for (int j = 0; j < len2 - i - 1; j++)
		{
			if (pArray2[j]>pArray2[j + 1])
			{
				int temp = pArray2[j];
				pArray2[j] = pArray2[j + 1];
				pArray2[j + 1] = temp;
			}
		}
	}
	int *b, *c;
	b = reNum(pArray1, len1);
	c = reNum(pArray2, len2);
	//至此,两个数组都变成了有序数组,从小到大排列
	int *p1 = pArray1 + len1;
	int *p2 = pArray2 + len2;
	int num = 0;//相同元素的个数
	int f;
	while (pArray1 < p1&&pArray2 < p2)
	{
		if (*pArray1 == *pArray2)
		{
			num++;
			f = *pArray1;
			pArray1++;
			pArray2++;
		}
		else if (*pArray1 < *pArray2)
		{
			pArray1++;
			continue;
		}
		else
		{
			pArray2++;
			continue;
		}
	}
	
	num = num+b[f]+c[f];

	return len1 + len2 - num;

}
int main()
{
	int f[5] = { 1, 3, 3, 4, 7 };
	int g[6] = { 2, 3, 5, 9, 8 ,6 };
	int size=Match2Array(f, 5, g, 6);
	/*int f[3] = { 1, 3, 3};
	int g[3] = { 2, 3, 5 };
	int size = Match2Array(f, 3, g, 3);*/
	cout << size << endl;

	return 0;
}

//数组中包含多个重复元素
#include "stdafx.h"
#include "stdio.h"
#include"stdlib.h"
#include<iostream>

using namespace std;

//统计数组中相同元素的个数
int *reNum(int *p, int size)
{
	int arr[10] = { 0 };

	for (int i = 0; i < size;i++)
	{
		arr[p[i]]++;
	}
	return arr;
}
int Match2Array(int * pArray1, int len1, int * pArray2, int len2)
{
	for (int i = 0; i < len1 - 1; i++)
	{
		for (int j = 0; j < len1 - i - 1; j++)
		{
			if (pArray1[j]>pArray1[j + 1])
			{
				int temp = pArray1[j];
				pArray1[j] = pArray1[j + 1];
				pArray1[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < len2 - 1; i++)
	{
		for (int j = 0; j < len2 - i - 1; j++)
		{
			if (pArray2[j]>pArray2[j + 1])
			{
				int temp = pArray2[j];
				pArray2[j] = pArray2[j + 1];
				pArray2[j + 1] = temp;
			}
		}
	}
	int *b, *c;
	b = reNum(pArray1, len1);
	c = reNum(pArray2, len2);
	//至此,两个数组都变成了有序数组,从小到大排列
	int *p1 = pArray1 + len1;
	int *p2 = pArray2 + len2;
	int num = 0;//相同元素的个数
	int k=0,f[10] = { 0 };

	while (pArray1 < p1&&pArray2 < p2)
	{
		if (*pArray1 == *pArray2)
		{
			num++;
			f[k++] = *pArray1;
			pArray1++;
			pArray2++;
		}
		else if (*pArray1 < *pArray2)
		{
			pArray1++;
			continue;
		}
		else
		{
			pArray2++;
			continue;
		}
	}
	for (int kk = 0; kk < sizeof(f) / sizeof(f[0]); kk++)
	{
		num = num + b[f[kk]] + c[f[kk]];
	}

	return len1 + len2 - num;

}
int main()
{
	int f[5] = { 1, 3, 3, 7, 7 };
	int g[6] = { 2, 3, 5, 7, 8 ,6 };
	int size=Match2Array(f, 5, g, 6);
	/*int f[3] = { 1, 3, 3};
	int g[3] = { 2, 3, 5 };
	int size = Match2Array(f, 3, g, 3);*/
	cout << size << endl;

	return 0;
}

备注:上面的程序在统计相同元素的个数时只考虑到了实际数组的取值范围是:0~9的情况,所以在reNum()函数中只做这样的处理:
int arr[10] = { 0 };
其它的可以根据自己的需要进行调整。

版权声明:本文为@那年聪聪 原创文章,未经博主允许不得转载。

求C语言数组中元素的个数

整型数组   int a[]={1,1,2,2,2,3}; int i=sizeof(a)/sizeof(0); printf("%d",i);      字符型数组    char *a[]={"s...
  • Developer_data
  • Developer_data
  • 2016年11月20日 09:40
  • 3475

【C++】求数组中所有元素的排列或组合

基本目标是这样的,比如有如下的数组{0,1,2,3,7,8,12,40,51}需要求出其所有排列与组合, 需要求出其所有组合,做出如上的结果,也就是随便在数组中挑两个数组成一个对子。 代码如下,这...
  • yongh701
  • yongh701
  • 2015年07月29日 10:44
  • 2290

C语言 -- 计算一个数组中每个元素出现的频率

1. 问题描述: 假设有个整型数组inputArray,共有N个元素。我们要统计每个元素出现的频率。 2. 分析: 这个问题的难点在于保存每个元素的当前频率值。 比如元素1,当前出现1次了,怎...
  • lx1848
  • lx1848
  • 2016年10月14日 17:44
  • 1915

C/C++统计数组中不同数值的个数和概率

C/C++统计数组中不同数值的个数和概率
  • roadoneplus
  • roadoneplus
  • 2017年01月17日 15:18
  • 1555

如何获取c++ Array元素个数

这个问题可简单描述为: 给定一个c++ 数组(如:int x[10]),如何获取它的元素个数?一种显而易见的方法是使用宏(定义1):#define countof( array ) (sizeof(...
  • wangruitao1991
  • wangruitao1991
  • 2017年02月07日 14:53
  • 1846

c++中用一个变量定义一维数组的元素个数

即所谓的变长数组 C89标准不支持变长数组的功能,也就是说数组的长度在编译期就确定,不能在运行期改变。 在C99标准中,新增的一项功能就是允许在C语言中使用变长数组。然而,C99定义的这种变长数组的使...
  • u014546553
  • u014546553
  • 2016年12月02日 14:40
  • 1927

【c语言】统计一个数字在排序数组中出现的次数

// 题目:统计一个数字在排序数组中出现的次数。 //  例如:排序数组{1,2,3,3,3,3,4,5}和数字3,由于3出现了4次,因此输出4 有一种最简单的算法,遍历。但是有比...
  • zhaoyaqian552
  • zhaoyaqian552
  • 2015年07月14日 19:33
  • 1495

统计数组元素个数:count()、sizeof()和array_values()

int count ( mixed $var [, int $mode] )— 计算数组中的单元数目或对象中的属性个数返回 var 中的单元数目,通常是一个 array,任何其它类型都只有一个单元。...
  • sayigood
  • sayigood
  • 2010年09月20日 08:21
  • 5918

【算法C++】检测数组里是否有两个数之和等于某个数

问题: 检测数组里是否有两个数之和等于某个数解决方法一:先将数组排序,然后从两头开始遍历 数组排序后,从左端开始取最小值,从右端取最大值, 判断两者之和与目标的大小: 1. 等于时,输出两个数...
  • zgljl2012
  • zgljl2012
  • 2015年09月27日 20:17
  • 2329

oj1045: 输入一个数插入有序数组中

问题描述:已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。 作者:何知令 发表时间:2017年3月2日 输入:第一行,原始数列。第二行,需要插入的数字。 输出:...
  • qq_36203090
  • qq_36203090
  • 2017年03月02日 22:19
  • 235
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++ 统计两个数组中不同元素的个数
举报原因:
原因补充:

(最多只允许输入30个字)