输入一组无序的整数,编程输出其中出现次数最多的整数及其出现次数。(C语言)

本文介绍了如何使用C语言编写程序,解决输入一组无序整数的问题,找出其中出现次数最多的整数及其出现次数,通过排序、遍历和计数实现算法。

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

问题描述:输入一组无序的整数,编程输出其中出现次数最多的整数及其出现次数。 


首先定义三个数组a,b,c,其中:

a数组存放这组无序的整数;

b数组存放某个重复数字出现的次数;

c数组存放该重复数字在a数组中的序号;

int a[100],b[100],c[100];
	
int n,i,j,t,max;  

 然后将这组数排序n次,使其变成从小到大排序的数列(重复数字会相邻排列)

 for(i=1;i<n;i++)
{   

     for(j=0;j<n-1;j++)
    {

         if(a[j]>a[j+1])
		{
			t=a[j];

            a[j]=a[j+1];

            a[j+1]=t;

         }

     }

     j=0;  //重置j

     t=-1; //重置t 
        
}

 遍历排序后的数组a,记录重复数字出现的次数及其在数组a中的序号

for(i=0;i<n-1;i++)
{
        
		if(a[i]!=a[i+1])  
		{
			
			b[j]=i-t;  
			
		 	c[j]=i;    

            t=i;

            j++;
		
		} 

    	b[j]=n-1-t;

        c[j]=n-1;
          
    }

 比较数组b中的数,得出最大的数,即重复最多的次数

for(i=1;i<=j;i++)
{

     if(max<b[i])     
     {

         max=b[i];

     }
        
}

测试1:

测试2:


完整代码:

#include <stdio.h>

int main(){
	
	int a[100],b[100],c[100];  //a记录数字序列;b记录某个数字重复出现的次数;c记录这个数字的序号 
	
	int n,i,j,t,max;  

    scanf("%d",&n);  //输入整数个数 

    for(i=0;i<n;i++)
	{

        scanf("%d",&a[i]);    //依次输入整数,存放在a数组 

    }

    for(i=1;i<n;i++)  //将这组数排序n次,变成从小到大排序的数列 
	{   

        for(j=0;j<n-1;j++)
		{

          if(a[j]>a[j+1])   //如果左边的数大于右边的数 ,交换它们的位置 
		  {
			t=a[j];

            a[j]=a[j+1];

            a[j+1]=t;

          }

        }

        j=0;  //重置j

        t=-1; //重置t 
        
	}

    for(i=0;i<n-1;i++)  //遍历排序后的数组a 
	{
        
		if(a[i]!=a[i+1])  //记录同样的数字出现的次数(当左边的数不等于右边时,表示左边的数字结束重复了) 
		{
			
			b[j]=i-t;  //数组b记录该数字重复的次数 
			
		 	c[j]=i;    //数组c记录该数字在a数组中的序号 

            t=i;

            j++;
		
		} 

    	b[j]=n-1-t;

        c[j]=n-1;
        
        max=b[0];    //设max初始为b[0],即第一个数字重复出现的次数 

    }

    for(i=1;i<=j;i++)
	{

        if(max<b[i])     //比较b数组中最大的数,即重复次数最多的次数 
		{

            max=b[i];

        }
        
    }

    for(i=0;i<=j;i++)
	{

        if(b[i]==max)
		{

        t=c[i];   //c[i]表示该数字在a数组中的序号,赋值给t 

        printf("%d %d\n",a[t],b[i]);   //输出整数及出现个数 

    	}
	}

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可可南梨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值