注册 登录
编程论坛 C++教室

马上要考试,还有个疑问,求大神指点

ly121918 发布于 2016-01-01 17:20, 2543 次点击
题目如下:小红是医学院的新生,她对微生物学非常感兴趣,而在微生物的培养过程中,经常需要用显微镜进行微生物的种类和数量的统计。
小红的老师要小红统计显微镜下出现次数最多的细菌,小红在观察细菌的过程中,用自然数来代表她观察到的细菌种类(细菌的种类m<=100,从1到m连续编号),每观察到一个细菌就在纸条上记下一个自然数。观察结束后,她手头就有了一张有n个数字的纸条(n<=1000)。她需要知道在m中细菌中哪种细菌出现的次数最多,并记录其次数。
我的思路如下:
#include<stdio.h>
int main()
{
    int n,i,j,a[1001],b[101]={0},tmp,num;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
  {
     scanf("%d",&a[i]);
   }
    for(i=1;i<=n;i++)
  {
    for(j=1;j<=100;j++)
    {
       if(a[i]==j) b[j]++;
     }
  }
   for(i=1;i<=n;i++)
  {
    for(j=1;j<=n-i;j++)
      if (b[j]>b[j+1])
      {
        temp=b[j];
        b[j]=b[j+1];
        b[j+1]=temp;
       }
   }
   但把每个细菌出现的次数排序之后就不知道怎么做了。不知道怎么把细菌编号和出现次数对应起来,求大神帮忙!由于第一次发帖,没有分,有人能帮忙吗?
3 回复
#2
eFun2016-01-02 13:06
在数组a里记录细菌种类编号,数组b里以种类编号为下标递增,不知道理解错了没有。
#3
yangfrancis2016-01-03 12:23
short germ[100];
for(short i=0;i<100;i++) germ[i]=0;   //在开始观察前,所有细菌数量重置为0
short x;       //用于记录标识细菌种类的自然数
do
{
   cin>>x;
   if(x<0||x>99)    //用户输入小于0或大于99的自然数时结束观察
      break;
   else
      germ[x]++;
}while(x>=0);
#4
rjsp2016-01-04 08:43
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned b[101] = { 0 };
    unsigned x = 0;

    unsigned n;
    scanf( "%u", &n );
    for( unsigned i=0; i!=n; ++i )
    {
        unsigned m;
        scanf( "%u", &m );
        ++b[m];
    }
    for( unsigned i=1; i!=101; ++i )
    {
        if( b[i] > b[x] )
            x = i;
    }

    printf( "(%u) = %u\n", x, b[x] );
    return 0;
}
输入
6
1 2 9 2 2 3
输出
(2) = 3

1