环境vs2010
/ Test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Node{
public:
int value;
int n;
Node(){value=0;n=0;}
};
int find(Node a[],int n,int x)//放回为n则没有找到,<n则找到
{
int i=0;
for(;i<n;i++){if(x==a[i].value){return i;}}
return i;
}
void findN(Node a[],int n,int x,int b[],int &nn)//b记录node.n=x的数的下标
{
int i=0,j=0;
//int* b=new int[n];
for(;i<n;i++){if(x==a[i].n){b[j++]=i;}}
nn=j;
//return i;
}
void insert(Node a[],int n,int x)
{
a[n].value=x;a[n].n++;
}
void fun(int a[],int n) //输出数组中出现次数最多的数(若有次数相同的,输出value较小的)
{
int i=0,j=0;//j为temp数组元素的个数
Node temp[100];
temp[0].value=a[0];
temp[0].n=1;
j++;
int f=0;
for(i=1;i<n;i++)
{
f=find(temp,j,a[i]);
if(f<j){(temp[f].n)++;}
else{insert(temp,j,a[i]);j++;}
}
int max=temp[0].n;
int m=0;//m为个数最多的数的下标
for(i=1;i<j;i++)
{
if(temp[i].n>max)
{
max=temp[i].n;m=i;
}
}
cout<<"相同的数的个数最多为:"<<max<<endl;
int tempN[10]={0},nn=0;
findN(temp,j,max,tempN,nn);
int min=temp[tempN[0]].value;
for(i=0;i<nn;i++)//从几个个数相同的数中找到最小的一个值
{
if(temp[tempN[i]].value<min){min=temp[tempN[i]].value;}
}
cout<<"个数最多的数中最小的为:"<<min<<endl;
//cout<<temp[m].value<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[]={1,2,1,4,1,6,1,3,4,6,7,1,3,1,5,6,6,7,6,6,6,1};
fun(a,22);
return 0;
}
转载于:https://blog.51cto.com/lyunfan/1369535