#面试题#

本文介绍了一个C++函数,用于合并两个整数数组并去除重复项,同时实现了升序排序。文章还分享了作者在实现过程中的经验和教训,包括动态内存分配和指针操作等关键点。

1,将两个数组按升序合并,并过滤掉重复数组元素

void Array(int* InputArray1, int InputNum1, int* InputArray2, int InputNum2, int** OutPutArray, int* OutputNum)
{
	int *R = new int[InputNum1 + InputNum2 + 1];
	int num = InputNum1 + InputNum2;
	int temp;
	int *R1 = new int[InputNum1 + InputNum2 + 1];
	int flag = 0;
	int count = 0;
//合并到一个数组里面
	for (int i = 0; i < InputNum1 + InputNum2; i++)
	{
		if (i < InputNum1)
		{
			R[i] = InputArray1[i];
		}
		else
			R[i] = InputArray2[i - (InputNum1)];
	}

//数组进行排序
	for (int i = 0; i < InputNum1 + InputNum2; i++)
	{
		for (int j = 0; j < InputNum1 + InputNum2 - i - 1; j++)
		{
			if (R[j] > R[j + 1])
			{
				temp = R[j];
				R[j] = R[j + 1];
				R[j + 1] = R[j];
			}
		}
	}

	for (int i = 0; i < num; i++)
		cout << R[i];

	cout << endl;

//重复数组元素进行删除
	for (int i = 0; i < InputNum1 + InputNum2 - 1; i++)
	{
		if (R[i + 1] == R[i])
		{
			R1[flag] = i + 1;
			flag++;
		}
	}

	*OutPutArray = new int[InputNum1 + InputNum2 + 1];

	for (int i = 0,j = 0; i < InputNum1 + InputNum2 ; i++)
	{
		if (R1[count] != i)
		{
			(*OutPutArray)[j] = R[i];
			j++;
		}
		else
			count++;
	}

	*OutputNum = InputNum1 + InputNum2 - flag;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int a1[] = {1,2,2,5,1};
	int a2[] = {1,2,3,4,5};
	int* a3 = NULL;
	int num = 0;

	Array(a1, 5, a2, 5, &a3, &num);

	for (int i = 0; i < num; i++)
	{
		cout << a3[i] << " ";
	}
	cout << endl;

	system("pause");
	return 0;
}


当时第一次做的时候,大致的思路是对的,分三步去实现整个函数功能,因为是手写,忽略了以下几点细节,希望能够引以为戒

1. 申请动态内存

   数组: int *Array = new int [ Size ] ;

       char* String = new char[ Size ] ;

2. 对作为二维数组的形参的操作

    例如:

void Array(int* InputArray1, int InputNum1, int* InputArray2, int InputNum2, int** OutPutArray, int* OutputNum)
我当时在纸上写的对二级指针的操作是:*OutPutArray[j] = R[i]; //这里少了一个括号 (*OutPutArray)[j] = R[i];导致我在编译器中一直出现内存读写错误,
编译器把它理解成 *(OutPutArray[j]) = R[i];

以上是我事后反思自己当时纸写代码时出现的问题,几个小细节没有注意到,希望能有帮助

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值