| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1931 人关注过本帖
标题:【OJ】求第五重的鱼的数量
只看楼主 加入收藏
qq731574722
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2016-2-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
【OJ】求第五重的鱼的数量
Description

sls有个喜好,最爱吃草鱼。但天天就知道吃可不行啊,下面问题就来了。话说,能解出这题,sls就能吃上美味的鲜鱼。于是sls希望你能写个程序帮助他。
给你n(10<=n<=100)条草鱼的重量,每条草鱼的重量为a(1<=a<=20,a为整数)。请你找出从重到轻排后,第五重的草鱼有多少条?(若两条草鱼的重量相同,则他们排相同的序号)。
Input

多组测试数据,

详见Sample Input
Output

详见Sample Output
Sample Input
10
9 4 9 6 7 1 2 4 4 8
Sample Output
3
程序代码:
#include <stdio.h>
#include <stdlib.h>

 
int main()
{
    void sort(int a[],int n);
    int a[100];
    int i,n,b,flag,sum;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        sort(a,n);
        b=a[0];    //b表示测试数组a中的不重复的数
        flag=1;    //flag用于排名
        sum=1;   //sum用于统计数量
        for(i=1;flag<5;i++)
        {
            if(b!=a[i])    //若b与a[i]不相等就使flag自加并将b重新赋值
            {
                b=a[i];
                flag++;
            }
        }                 //当flag=5时循环结束,这是b就是第五大的数
        for(i=0;i<n;i++)  //统计数组a与b相等的数的数量
            if(b==a[i])
                sum++;
        printf("%d\n",sum);
    }

 
    return 0;
}

 
void sort(int a[],int n)
{
    int i,j,k,temp;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if(a[k]<a[j])
            {
                k=j;
            }
        }
            temp=a[k];
            a[k]=a[i];
            a[i]=temp;
    }
}

 
/**************************************************************
    Problem: 1049
    User: 201501020151
    Language: C
    Result: Wrong Answer
****************************************************************/


选择排序法的函数经测试没有问题,能符合sample input和out。第一次发帖求助,思路可能表达地不是很清楚,希望各路大神带带咱们萌新。

[此贴子已经被作者于2016-2-3 13:39编辑过]

搜索更多相关主题的帖子: 美味 
2016-02-03 02:45
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:4 
感觉这个题目描述有问题,不能说第5重,而应该是序号为5.
把sample数据中任何一个9修改为其他数据,你就会发现output错误。
 for(i=1;flag>=5;i++)这句明显逻辑错误,flag初始值为1,不可能大于等于5的,所以这个for不会执行,另没考虑flag永远小于5的情况。

能编个毛线衣吗?
2016-02-03 08:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
不应该用排序

unsigned fuck[21] = { 0 };
循环 ++fuck[鱼重];

程序代码:
#include <stdio.h>

int main( void )
{
    unsigned n;
    scanf( "%u", &n );

    unsigned ws[21] = { 0 };
    for( unsigned i=0; i!=n; ++i )
    {
        unsigned w;
        scanf( "%u", &w );
        ++ws[w];
    }

    unsigned idx = 21;
    for( unsigned m=0; idx!=0 && m!=5; --idx )
    {
        if( ws[idx-1] != 0 )
            ++m;
    }

    printf( "%u\n", ws[idx] );
    return 0;
}

收到的鲜花
  • qq7315747222016-02-04 02:46 送鲜花  2朵   附言:我很赞同
2016-02-03 08:30
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:4 
这个逻辑性比较强,下面是我的想法,你可以试试,我身边没有软件,没有测试。
程序代码:
#include <stdio.h>

int main( void )
{
  const int N=10;
  int a[N]={9,4,9,6,7,1,2,4,4,8};
  
  int i,j,tmp;
  //从大到小排列
  for(i=0;i<N-1;i++)
    for(j=i+1;j<N;j++)
    {
        if(a[i])<a[j])
        {
            tmp=a[i];
            a[i]=a[j];
            a[j]=tmp;
        }
    }
    
    int count=0,k=0;
    for(i=0;i<N-1;i++)
    {
        if(a[i]!=a[i+1])
        {
            k++;    //一个一个地比较,相邻的不一样就加1
        }
        if(k==4)  //5-1,这时第五的重量就是从a[i+1]开始
        {
            if((i+1)==(N-1))  //这是第五的重量是最后一个数组元素的情况
                count=1;
            else
            {
                for(j=i+1;j<N-1;j++)  //统计相同个数
                   {
                      if(a[j]==a[j+1])
                      {
                         count++;
                      }
                   }
                count+=1;
            }
            
            break;
        }
    }
    
    if(count!=0)
    {
        printf("%d\n",count);
    }
    else
    {
        printf("There is no result!");
    }
}


[此贴子已经被作者于2016-2-3 11:52编辑过]


   唯实惟新 至诚致志
2016-02-03 11:27
qq731574722
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2016-2-3
收藏
得分:0 
回复 2楼 wmf2014
哦~for循环这里是不对,除了这个地方还有哪里要修改吗?
2016-02-03 13:38
qq731574722
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2016-2-3
收藏
得分:0 
回复 4楼 qq1023569223
我把你的代码稍微修改了一下,可以运行没问题,但提交上去就是WA,不知道为什么。
程序代码:
#include <stdio.h>

int main( void )
{

    int a[100];
    int i,j,tmp,N;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<N-1;i++)
      for(j=i+1;j<N;j++)
      {
        if(a[i]<a[j])
        {
            tmp=a[i];
            a[i]=a[j];
            a[j]=tmp;
        }
     }

    int count=0,k=0;
    for(i=0;i<N-1;i++)
    {
        if(a[i]!=a[i+1])
        {
            k++;    //一个一个地比较,相邻的不一样就加1
        }
        if(k==4)  //5-1,这时第五的重量就是从a[i+1]开始
        {
            if((i+1)==(N-1))  //这是第五的重量是最后一个数组元素的情况
                count=1;
            else
            {
                for(j=i+1;j<N-1;j++)  //统计相同个数
                   {
                      if(a[j]==a[j+1])
                      {
                         count++;
                      }
                   }
                count+=1;
            }

            break;
        }
    }

    if(count!=0)
    {
        printf("%d\n",count);
    }
    else
    {
        printf("There is no result!");
    }
    return 0;
}
2016-02-03 14:27
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:2 
回复 6楼 qq731574722
结果会对吗?你的那个应该是考试环境,有时间,内存消耗的要求,请看VC下运行怎么样。

   唯实惟新 至诚致志
2016-02-03 15:15
qq731574722
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2016-2-3
收藏
得分:0 
回复 7楼 qq1023569223
结果是对的,我用的是code blocks,提交的环境就是学校的OJ,我经常碰到类似的问题,确不知道如何解决
2016-02-03 19:00
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
回复 8楼 qq731574722
我也不了解你那个什么东西。

   唯实惟新 至诚致志
2016-02-03 19:38
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:0 
参考3楼版主的计数法排序吧,对数据范围确定且小范围的整数排序,方便快速,对整个数字一次性扫描即可,最后反向访问整数范围数组,大于0的计一次序号,序号为5时即所需答案。
2016-02-03 20:41
快速回复:【OJ】求第五重的鱼的数量
数据加载中...
 
   



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

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