编写函数,返回在一个整数组中出现次数最多的数及其出现次数。
发布网友
发布时间:2023-08-01 04:15
我来回答
共5个回答
热心网友
时间:2023-08-23 13:17
#include<stdio.h>
#include<windows.h>
#include<time.h>
#define N 1000
int Fun(int a[],int n,int x[])
//a[]是数组 n是数组个数 x[]是要保存的最大数字的值,先排序,利用同一个数字是否变化来决定出现的次数
{
int i,j,t,check,maxtime,maxsuffix; //check是检查何时变化数字的 maxtime是最大次数 maxsuffix是最大的哪个数是
int value[N][2]={0};//一个数组,value[][0]保存当前的数值 value[][1]保存这个数字出现的次数
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} //排序
check=0;
/*
for(i=0;i<n;i++)
{
printf("%3d",a[i]);
if((i+1)%10==0) puts("\n");
}
*/
/////////////////////////////////算法:排序后数字是按次序存放,通过是否变化新数值来判断出现了多少次
for(i=0;i<n-1;i++)
{
if(a[i]!=a[i+1]) check=i; //要是这个数和下个数不相等 value数组进入下一位,出现新数字
value[check][0]=a[i]; //保存这个数的数值
value[check][1]++; //保存这个数的出现次数+1
}
////////////////////////////////////////////////////////////////////////////////////////////////////
maxtime=value[0][1]+1; //原来本身算一次
for(i=0;i<=check;i++)
if(maxtime<value[i][1]) {maxtime=value[i][1];maxsuffix=value[i][0];}
/////下面是当出现次数最多的数字不只一个时,保存所有的数值
j=0;
for(i=0;i<=check;i++)
if(maxtime==value[i][1]) {x[j]=value[i][0];j++;}
return(maxtime);
}
void main()
{
int a[100],*p=a,maxtime,maxvalue[10]={0};
int i;
srand(time(NULL));
for(i=0;i<100;i++)
{
a[i]=rand()%25+1;
}
maxtime=Fun(p,100,maxvalue);
//输出
for(i=0;i<100;i++)
{
printf("%3d",*(p+i));
if((i+1)%10==0) printf("\n");
}
/////////////////
for(i=0;i<10;i++)
{
if(maxvalue[i]!=0) printf("\n %d 出现了%d次.\n",maxvalue[i],maxtime);
}
}
热心网友
时间:2023-08-23 13:17
说一下思路自己去敲代码吧。
假设整数数组为A,定义一个数组B用来存取每个整数出现的次数,用A数组中的每一个整数和A数组中每一个元素进行比较如果相同数组B相应元素加1,最后求数组B中的最大值就是出现次数最多的整数,假设是B【5】,那么这个整数就是A【5】。
热心网友
时间:2023-08-23 13:17
#include<stdio.h>
#include<stdlib.h>
void main()
{
int *x,n,i,j,y,t,m=0;
printf("输入个数\n");
scanf("%d",&n);
x=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++) scanf("%d",x+i);
for(i=0;i<n;i++)
{t=0;
for(j=0;j<n;j++)
if (x[i]==x[j]) t=t++;
if(t>m) {m=t;y=*x;}
}
printf("次数最多的数%d 次数%d",y,m);
free(x);
}
热心网友
时间:2023-08-23 13:18
long findmax(int *num,int n){
int max,nmax=0,temp,ntemp=0;
for (int i=0;i<n;i++){
temp=*(num+i);
if (ntemp>nmax){
nmax=ntemp;
max=temp;
}
ntemp=0;
for (int j=0;j<n;j++)
if (temp==*(num+j)) ntemp++;
}
return max*n+nmax;
}
void main(){
int a[6]={2,2,4,4,4,3};
int max,nmax;
long t;
t=findmax(&a[0],6);
nmax=t%6;
max=(int)t/6;
printf("%d,%d",max,nmax);
}
热心网友
时间:2023-08-23 13:19
int main()
{
int a[10]={1,2,3,2,2,6,7,1,1,1};
int i,j,temp,n=sizeof(a)/sizeof(int);
for(i=n;i>0;i--){
for(j=0;j<i;j++)
{
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
//以上是 冒泡 就不说了
//下边是找到哪个数出现的次数最多 并且 指出来 是谁!
int e=0,b=0,c=0,d=0;
for(i=0;i<n-1;i++){
if(a[i]==a[i+1]){//记录同一个数出现的次数,当当前数与下一个数一样时 e++
e++;//这个e记录了 出现的次数
}else{//否则就 b++
b++;
}
if(b==1 && e>c){//每边一次数,b就会是1,并且e这次记录的次数大于c第三个数时
d=a[i];//d是次数最多的 这个数
c=e+1;//上边e的时候 少加了一次,这里补上加一
e=0;//重置为0
b=0;//重置为0
}
}
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
puts("");
printf("cishu=%d,sz=%d \n",c,d);
return 0;
}
复制粘贴就可以了,我这个方法稳得一批,自己一看就明白。
加上注释更能通俗易懂 。看好你哦