//众数—分治法
#include <bits/stdc++.h>
#include<algorithm>
using namespace std;
int a[100]; // 众数
int b[100]; // 重数
int mode(int c[],int l,int r)
{
int i,j,k=0;
int mid;
mid=(l+r)/2;
i=l;
j=r;
for(;i<mid&&c[i]!=c[mid];i++);
for(;j>mid&&c[j]!=c[mid];j--);
a[k]=c[mid];
b[k]=j-i+1;
k++;
if(b[k]>l-i && b[k]>j-r)
{
return k;
}
if(i-l>=b[k])
{
mode(c,l,i-1);
}
if(r-j>=b[k])
{
mode(c,j+1,r);
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",c[i]);
sort(c,c+n);
mode(c,0,n-1);
int max=b[0];
for(int i;i<k;i++)
{
if(b[i]>max)
{
max=b[i];
}
}
for(int i;i<k;i++)
{
if(b[i]==max)
{
printf("%d %d\n",a[i],b[i]);
}
}
}
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。