算法设计与分析C++ 第三章: 递归与分治策略(附众数与重数 非分治实现等算法)

  • Post author:
  • Post category:其他


直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。

递归需要有边界条件、递归前进段和递归返回段。 当边界条件不满足时,递归前进; 当边界条件满足时,递归返回。



分治的基本思想

在这里插入图片描述



汉诺塔


汉诺塔大整数实现



众数与重数 非分治实现


总时间限制: 1000ms 内存限制: 1000kB



描述


给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。对于给定的n个自然数组成的多重集S,计算S的众数及其重数 。


输入


输入集合大小n及n个数


输出


输出两行

第一行为众数

第二行为重数


样例输入


6

1 2 2 2 3 5


样例输出


2

3

#include<iostream>
using namespace std;
int main() 
{
	int i,j,n,same,max=-1;
	
	//输入
	int a[5000],b[5000];
	cin>>n;
	for(i=0;i<n;i++){
		cin>>a[i];
	}
	
		
	for(i=0;i<n;i++){
		b[i]=0;
	}


	//记录个数
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(a[i]==a[j])
				b[i]  ;
		}	
	}
	
	for(i=0;i<n;i++)
	{
		if(b[i]>max){
			max=b[i];
			same=a[i];
		}
			
		if(b[i]==max)
		{
			if(a[i]<a[max]){
				max=b[i];
				same=a[i];
			}		
		} 
	}
	cout<<same<<" "<<max;
	
	return 0;
} 



版权声明:本文为Chuang98原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。