zoukankan      html  css  js  c++  java
  • ECNU 2852 统计字母频率

    ECNU 2852 统计字母频率

    链接

    https://acm.ecnu.edu.cn/problem/2852

    题目

    单点时限: 2.0 sec

    内存限制: 256 MB

    给定一个由若干单词构成的英文句子,单词与单词之间用空格分隔。每个单词只包含小写的英文字母(a~z)。一个句子中的单词个数最多不超过 100 个,而每个单词中包含字母的个数不超过 30 个。

    请找出在句子中出现频率最高的字母,并输出该字母出现的频率(精确到小数点后 2 位)。

    输入格式
    输入一行,表示一个句子。

    输出格式
    在一行中输出出现频率最高的字母,以及该字母出现的频率(精确到小数点后 2 位),两者之间用一个空格分隔。如果存在多个字母满足要求,则按照字典顺序做升序排序,输出最小的字母。

    样例
    input
    enjoy the acm icpc programming contest
    output
    c 0.12

    思路

    首先输入要用next,这样读取空格,之后遍历,26个字母就拿数组存放出现次数,同时用count记录字母的总数。
    接下来从后往前找到最大的那个数,这里用大于等于,因为优先用前面的字母。
    转换成字母并输出,随后输出频率,这里频率有点坑,我先转成double再除就是对了,不转就是错的。

    代码

      public static void fun() {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        StringBuffer sb = new StringBuffer(str);
        int[] a = new int[27];
        int count = 0;
        for (int i = 0; i < sb.length(); i++) {
          char temp = sb.charAt(i);
          if (temp >= 'a' && temp <= 'z') {
            a[temp - 'a']++;
            count++;
          }
        }
        int max = a[25];
        int tag = 25;
        for (int i = 24; i >= 0; i--) {
          if (a[i] >= max) {
            max = a[i];
            tag = i;
          }
        }
        char ans = (char) (tag + 'a');
        double pin = (double) max / (double) count;
        System.out.print(ans + " ");
        DecimalFormat df = new DecimalFormat("0.00");
        System.out.print(df.format(pin));
      }
    
  • 相关阅读:
    Report studio交叉表求指定维度和的问题
    Cognos清除本地高速缓存的利与弊
    学习技巧-如何在IBM官网寻找学习资料
    Cognos利用DMR与文本对象设计中国式报表
    Cognos Report Studio 链接查询需要注意的地方2
    linux下自己下载的程序装哪?
    maven编译war包,pom中必须有的几个dependency
    跨站请求伪造解决办法之——过滤referer
    tomcat禁用webdav
    Tomcat配置https
  • 原文地址:https://www.cnblogs.com/blogxjc/p/14295310.html
Copyright © 2011-2022 走看看