| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 635 人关注过本帖
标题:请问,这个程序有什么问题,请帮我精简一下
只看楼主 加入收藏
zrf625278699
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-10-14
收藏
 问题点数:0 回复次数:3 
请问,这个程序有什么问题,请帮我精简一下
问题描述:
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重
集S中重数最大的元素称为众数。
例如,S={1,2,2,2,3,5}。
多重集S的众数是2,其重数为3。

对于给定的由n 个自然数组成的多重集S,计算S的众数及其重数。

数据输入:

输入多重集S中元素个数n;接下来的n行中,每行有一个自然数。

结果输出:

输出第1行给出众数,第2 行是重数。

Sample Input

6
1
2
2
2
3
5

Sample Output

2
3



#include<stdio.h>
int main()
{
    int a[100],n;
    while(1==scanf("%d",&n))
    {
        int i,j,b[100],t;

        for(i=0;i<n;i++)scanf("%d",&a[i]);
        for(j=0;j<n-1;j++)
        {
            for(i=0;i<n-j-1;i++)
                if(a[i]>a[i+1])
                {
                    t=a[i];
                    a[i]=a[i+1];
                    a[i+1]=t;
                }
        }
        b[0]=1;
        for(i=0;i<n;i++)
        {
            if(a[i+1]>a[i]) b[i+1]=1;
            if(a[i+1]==a[i]) b[i+1]=b[i]+1;
        }
        int max=b[0],c;
        for(i=1;i<n;i++)
        {
            if(b[i]>max) {max=b[i];c=i;}
        }
        printf("%d\n%d\n",a[c],max);
        for(i=c+1;i<n;i++)
        {
            if(b[i]==max) printf("%d\n%d\n",a[i],b[i]);
        }
        
    }

    return 0;
}

各位大哥大姐  帮忙看看  帮我精简一下  或者把你们的结果给我看看  谢过了!!!!!
搜索更多相关主题的帖子: 精简 
2008-10-16 21:45
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
你的代码没测试,也不知道结果是否正确,一会测试一下。

我的代码也不是最好的,谨作参考。

WIN-TC下测试,正常,结果正确。如果出现相同的重数,以最先出现的为准。

程序代码:
/*******************************************************************************

        问题描述:
        给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重
    集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,
    其重数为3。

        对于给定的由n 个自然数组成的多重集S,计算S的众数及其重数。

        数据输入:

        输入多重集S中元素个数n;接下来的n行中,每行有一个自然数。

        结果输出:

        输出第1行给出众数,第2 行是重数。

        Sample Input

        6
        1
        2
        2
        2
        3
        5

        Sample Output

        2
        3

*******************************************************************************/
#include<stdio.h>
#define N 1000
int n;
/*-------------------------输入-----------------------------------------------*/
void input(int *p)
{
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d",&p[i]);
        getchar();
    }
}
/*-----------------------选择排序---------------------------------------------*/
void sort(int *p)
{
    int i,j,k,tmp;
    for(i=0;i<n;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(p[k]>p[j])
                k=j;
        if(k!=i)
        {
            tmp=p[i];
            p[i]=p[k];
            p[k]=tmp;
        }
    }
}
/*----------------------------输出--------------------------------------------*/
void print(int *p)
{
    int q[N],i,j,k=0,max,tmp[N];
    for(i=0;i<n;i++)
        tmp[i]=1;/*---赋初值 ------------*/
    for(i=0;i<n;++i)
    {
        q[k]=p[i];
        if(p[i]==p[i+1])  /*--如果出现本数值和下一个数值相同的情况--*/
            tmp[k]++;    /*---记数器加1---*/
        else    k++;/*如果本数值和下一个数值不相同,记数和保存数值的数组下标下移*/
    }
    for(i=0,j=1;i<k;i++)
        if(j<tmp[i]) /* 比较一下记数器数组,整理出最大值的下标,保存在max中*/
        {
            j=tmp[i];
            max=i;
        }
    printf("%d\n%d\n",q[max],j);
}
void main(void)
{
    int a[N];
    do
    {
        printf("input n(1000<n>1):\n");
        scanf("%d",&n);
    }while(n>N||n<2);
    puts("ok");
    input(a);
    sort(a);
    print(a);
    return 0;
    getch();
}



2008-10-17 01:41
zrf625278699
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-10-14
收藏
得分:0 
谢谢   只是我用的是VC6.0    你的程序  
2008-10-17 11:22
wkl000
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-17
收藏
得分:0 
在VC6.0上,
只要将上边的程序变更一下就行了。
很佩服2楼的程序
我也是刚刚学习C的,
2楼的程序清晰,明了,思路很清晰,受益匪浅,
楼主只要稍微看一下2楼的程序就能明白了。
2008-10-17 17:08
快速回复:请问,这个程序有什么问题,请帮我精简一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038162 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved