9.6中兴嵌入式软件开发笔试

9.6笔试,记录一下。

一个舞蹈学院提供早晚课程。每个加入该学院的人都会获得一个唯一的ID。人们可以选择任意数量的舞蹈形式。有些在任何舞蹈形式上都不是很完美的人早晚课程都参加。舞蹈教练为参加课程的所有人员准备了一份早晚课程的单独列表。人员的ID在列表中重复的次数与他/她选择的舞蹈形式的数量相同。

该学院计划在年度活动中展示各种舞蹈形式。该学院想找一些能够在最后一天引领该活动的引领者。因此,教练正在寻找各种舞蹈形式中完美的舞者。根据教练的说法,完美的舞者是只上早课或者晚课一种课程的人。

写一个算法来找出教练选择来引领活动的完美舞者的人数。如果一个舞者在一种以上的舞蹈形式中是完美的,则他/她将被计算的次数与他/她完美的舞蹈形式的数量相同。

输入

该函数/方法的输入包括四个参数——

countMorning,一个整数,表示上早课的人数。

countEvening,一个整数,表示上晚课的人数。

morningList,一个整数列表,表示上早课人员的ID。

eveningList,一个整数列表,表示上晚课人员的ID。

输出

返回一个整数,表示教练选择来引领活动的完美舞者的人数。

示例

输入:

countMorning = 11

countEvening = 10

morningList = [1,1,2,3,4,5,5,7,6,9,10]

eveningList = [11,12,13,4,5,6,7,18,19,20]

输出:

12

解释:

早晚两个课程都参加的人员为4、5、6和7。

只参加早课或晚课的完美舞者为[1,1,2,3,9,10,11,12,13,18,19,20]。

所以,所有舞蹈形式的完美舞者人数是12。


代码如下(成功运行)

int perfectDancers(int countMorning, int countEvening, int *morningList, int *eveningList)
{
	int Mcount = 0, Ecount = 0;
	for (int i = 0; i < countMorning; i++)
	{
		//如果检测到-1,则退出此次循环
		if (morningList[i] == -1)
			continue;
		for (int j = 0; j < countEvening; j++)
		{
			//如果检测到-1,则退出此次循环
			if (eveningList[j] == -1)
				continue;
			//检测到相同的,则把后面所有相同的都置为-1
			if (morningList[i] == eveningList[j]){
				for (int n = i + 1; n < countMorning; n++){
					if (morningList[n] == morningList[i])
						morningList[n] = -1;
				}
				for (int m = j + 1; m < countEvening; m++){
					if (eveningList[m] == eveningList[j])
						eveningList[m] = -1;
				}
			}
			//将两个相同的置为-1
			morningList[i] = eveningList[j] = -1;
		}
	}
	//求出两组数中非负的个数
	for (int i = 0; i < countMorning; i++)
	{
		if (morningList[i] >= 0)
			Mcount++;
	}
	for (int i = 0; i < countEvening; i++)
	{
		if (eveningList[i] >= 0)
			Ecount++;
	}
	return Mcount+Ecount;
}

思路很清楚,把重复的数字删去(在这里置为-1)即可。

你可能感兴趣的:(C++)