分治算法——假硬币寻找,硬币找零,众数问题

本文介绍了分治算法在解决假硬币寻找、硬币找零和众数问题中的应用。对于假硬币问题,通过查找中间值进行比较来缩小范围;硬币找零采用双递归策略;众数问题则结合排序和减治思想处理数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分治算法(dac),是对递归或者递推技术的一种具体运用。处理问题的过程中,我们有时的确分而且治了(线性时间选择,归并排序),但更多情况下,恐怕是一种分而不治的思想(假硬币寻找,众数问题)通过递归技术,在逻辑上不断使原问题规模缩减,类似树从根节点不断寻值,直到返回目标值。

1,假硬币寻找:

问题很简单:n个数形成了一个数组,只有一个数与其他数值不同,找到其下标。

思想:对于奇数个硬币,找到中间值(注意:对数组的分治经常会寻找中间值),对左右比较(这点思路很简单,不赘述)

对偶数个硬币,找到中间两个硬币,进行左右比较即可。

#include <stdio.h>
int sum(int a[],int min,int max)
{
	int sum=0;   //注意此处赋值 
	for(int i=min;i<=max;i++)
	{
		sum+=a[i];
	}
	return sum;
}
int Judge(int a[],int min,int max)
{
	int mid;
	int mid1; 
	if((max-min+1)%2==0)
	{
		mid=(max+min)/2;
		mid1=mid+1;
		if(sum(a,min,mid-1)>sum(a,mid1+1,max))
		{
			Judge(a,mid1+1,max);
		}
		else if(sum(a,min,mid-1)==sum(a,mid1+1,max))
		{
			if(a[mid]<a[mid1])
			{
				return mid;
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值