首页 > 代码库 > 算法竞赛入门经典 习题3-1 分数统计 习题 3-2 单词的长度

算法竞赛入门经典 习题3-1 分数统计 习题 3-2 单词的长度

习题3-1 分数统计

输入一些学生的分数,哪个分数出现的次数最多?如果有多个并列,从小到大输出。
任务1:分数均不超过100的非负整数
任务2:分数均不超过100的非负实数,但最多保留两位小数。

任务1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 101 + 10
int a[MAXN];

int main(int argc, char *argv[])
{
  
  int n, max = 0, i;
  memset(a, 0, sizeof(a));
  while(scanf("%d", &n) == 1)
  {
     a[n]++;
     if(a[n] > max) max = a[n];
  }
  for(i = 0; i <= 100; i++)
  {
     if(a[i] == max) printf("%d ", i);
  }
  printf("\n");
  memset(a, 0, sizeof(a));
  system("PAUSE");	
  return 0;
}

任务2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAXN 10001 + 10
int a[MAXN];

int main(int argc, char *argv[])
{
  double degree, m;
  int max = 0, i;
  memset(a, 0, sizeof(a));
  while(scanf("%lf", °ree) == 1)
  {
     double m = degree*100;
     int n;
     n = floor(m+0.5);
     a[n]++;
     if(a[n] > max) max = a[n];
  }
  for(i = 0; i <= 10000; i++)
  {
     if(a[i] == max) printf("%.2lf ", i*0.01);
  }
  printf("\n");
 
  system("PAUSE");	
  return 0;
}

总结:任务2   degree设置为double,然后转为int,用floor(m+0.5),以前碰到过,切记


习题3-2 单词的长度

输出它们的平均长度。单词只包含大写字母和小写字母,用一个或多个空格隔开。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 100
char a[MAXN];

int main(int argc, char *argv[])
{
  int count = 0;
  float sum = 0;
  while(scanf("%s", a) == 1)
  {
     count++;
     sum += strlen(a);
  }
  
  printf("%.3lf\n", sum/count);
  system("PAUSE");	
  return 0;
}

总结:不知道网上其他的答案为什么写那么多代码,有时间要仔细看看

算法竞赛入门经典 习题3-1 分数统计 习题 3-2 单词的长度