作业帮 > 综合 > 作业

求问C语言:简易版最长序列

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/18 20:56:30
求问C语言:简易版最长序列
给你一组数(未排序),请你设计一个程序:求出里面个数最多的数.并输出这个数的长度.
例如:给你的数是:1、
2、 3、 3、 4、 4、 5、 5、 5 、6,其中只有6组数:1,2,3-3,4-4,5-5-5 and 6.
最长的是5那组,长度为3.所以输出3.
输入
第一行为整数t((1 ≤ t ≤ 10)),表示有n组测试数据.
每组测试数据包括两行,第一行位数组的长度n (1 ≤ n ≤ 10000).第二行为n个整数,所有整数Mi的范围都是(1 ≤ Mi < 2^32)
输出
对应每组数据,输出个数最多的数的长度.
样例输入
1
10
1 2 3 3 4 4 5 5 5 6
样例输出
3
请注意所有整数的范围最大到2的32次方.
#include<stdio.h>
void fun()
{
\x05int n,m,max=0,a[10]={0};
\x05scanf("%d",&n);
\x05while(n--)
\x05{
\x05\x05scanf("%d",&m);
\x05\x05a[m]++;
\x05}
\x05for(m=0;m<10;m++)
\x05\x05if(a[m])
\x05\x05{
\x05\x05\x05if(a[m]>max)
\x05\x05\x05\x05max=a[m];
\x05\x05}
\x05\x05for(m=0;m<10;m++)
\x05\x05\x05if(a[m]==max)
\x05\x05\x05\x05printf("%d  %d\n",m,a[m]);
}
int main()
{
\x05int t;
\x05scanf("%d",&t);
\x05while(t--)
\x05{
\x05\x05fun();
\x05}
\x05return 0;
}

再问: 这方法我也会,没看到我说注意最后输入的整数最大的有2的32次方么? 这怎么整?
再答: http://hi.baidu.com/rankabc/item/1942292ac6db833b087508c0
再问: 这方法太牛了,我指针不熟,今年刚大一,没别的一些循环套用之类的方法了么?
再答: 方法很多,这只是其中一种
再问: 那能说说不? 不用指针,就像你第一种那样的有不?
再答: 思路是一样的定义两组数据,一组存输入的值,另一组存频率如果测试数据比较小或者在某个范围的话可以利用数组下标来存储,就像第一个方法那样#include<stdio.h>
void fun()
{
    int i,j,n,max=0;
int a[10000]={0},b[10000]={0};
    scanf("%d",&n);    
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        b[i]++; //出现次数
        for(j=0;j<i;j++)
            if(a[i]==a[j]){b[j]++;b[i]=0;}
    }
    for(i=0;i<n;i++)
        if(b[i]>max)max=b[i]; //最大次数
for(i=0;i<n;i++)
if(b[i]==max)  //输出
printf("%d %d\n",a[i],b[i]);
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        fun();
    }
    return 0;
}