微软2014在线笔试 第三题

本文探讨了一个算法问题,即在一个整数数组中找到一对元素进行交换,以最大程度地减少数组中的逆序对数量。算法遍历数组并使用双重循环来计算逆序对的数量,最终返回调整后的逆序对数量或原始数量。
Description

Find a pair in an integer array that swapping them would maximally decrease the inversion count of the array. If such a pair exists, return the new inversion count; otherwise returns the original inversion count.

Definition of Inversion: Let (A[0], A[1] ... A[n]) be a sequence of n numbers. If i < j and A[i] > A[j], then the pair (i, j) is called inversion of A.

Input
Input consists of multiple cases, one case per line.Each case consists of a sequence of integers separated by comma.

Output
For each case, print exactly one line with the new inversion count or the original inversion count if it cannot be reduced.

#include <stdio.h>
#include <string.h>

#define MAXWORDS 100

int main()
{
	char c;
	int i, j, num, ans, time;
	char cc[MAXWORDS];

	memset(cc, '*', sizeof(cc));

	printf("INPUT THE time YOU WANT \n");
	scanf("%d", &time);

	setbuf(stdin,NULL);
	while(time--)
	{
		printf("INPUT THE COUNT ARRAY YOU WANT \n");
		i = 0;
		num = 0;
		while((c = getchar())!= '\n')
		{
			if (c != ',')
			{
				cc[i] = c;
				i++;
				num++;
			}
		}

		ans = 0;
		for (i = 0; i < num - 1; i++)
		{
			for (j = i + 1; j < num; j++)
			{
				if (cc[i] > cc[j])
				{
					ans++;
				}
			}
		}
		printf(" THE ANSWER IS %d\n", ans);
	}
	return 0;
}



心得:算法遍历了整个数组,利用了两个循环:

for (i = 0; i < num - 1; i++)
	{
		for (j = i + 1; j < num; j++)
		{

在数组排序的时候也用到这两的循环,i from0 to num-1;j from i+1 to num。这样,j永远大于i,我们只需要判断cc[i] > cc[j]即可。


关于函数setbuf(stdin,NULL)——

在第一次完成函数之前没有加这个语句。所以输入完测试例的数目time,习惯性按下回车,这样导致第一次循环的时候,c直接被赋值为'\n',然后进入下一个循环。通过函数setbuf(stdin,NULL)清空输入流中的缓存,在这里就是你多余输入的那个'\n',然后重新输入c。


内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值