• 算法-次数差


    【问题描述】

    x星球有26只球队,分别用 a ~ z 的26个字母代表。他们总是不停地比赛。
    在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。
    国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?
    (当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)

    【输入格式】
    一个串,表示球队获胜情况(保证串的长度<1000)

    【输出格式】
    要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。

    【样例输入1】

    abaabcaa

    【样例输出1】

    4

    【提示】
    a 出现 5 次,最多;c 出现1次,最少。
    5 - 1 = 4

    【样例输入2】

    bbccccddaaaacccc

    【样例输出2】

    6


    题解:

    1. #include <cstdio>
    2. #include <cstring>
    3. #include <iostream>
    4. #include <algorithm>
    5. using namespace std;
    6. const int N = 1010;
    7. int cnt[26];
    8. char a[N];
    9. char b[27] = {"abcdefghijklmnopqrstuvwxyz"};
    10. int main()
    11. {
    12. cin >> a;
    13. for (int i = 0; i < 26; i ++)
    14. for (int j = 0; a[j]; j ++) // 字符串数组以 '\0' 结尾,可用作循环结束标志
    15. if(b[i] == a[j]) cnt[i] ++;
    16. int maxn = 0, minn = 1000;
    17. for (int i = 0; i < 26; i ++)
    18. if(cnt[i]) // 排除一次都没有获胜的队伍
    19. {
    20. maxn = max(maxn, cnt[i]);
    21. minn = min(minn, cnt[i]);
    22. }
    23. cout << maxn - minn << endl;
    24. return 0;
    25. }

    练习题:次数差 

    问题描述

    x星球有26只球队,分别用 a ~ z 的26个字母代表。他们总是不停地比赛。

    在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。

    国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?

    (当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)

    输入格式

    一个串,表示球队获胜情况(保证串的长度<1000)

    输出格式

    要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。

    样例输入1

    abaabcaa

    样例输出1

    4

    提示

    1. a 出现 5 次,最多;c 出现1次,最少。
    2. 5 - 1 = 4

    样例输入2

    bbccccddaaaacccc

    样例输出2

    6

    以下选项错误的是?

    A

    int a[26];

    int main()
    {
        string str;
        cin >> str;
        for (int i = 0; i < str.length(); i++)
        {
            a[str[i] - 'a']++;
        }
        sort(a, a + 26);
        for (int i = 0; i < 26; i++)
        {
            if (a[i] != 0)
            {
                cout << a[25] - a[i] << endl;
                break;
            }
        }
        return 0;
    }

    Bint cnt[1001];
    int main()
    {
        string s;
        cin >> s;
        int max1 = -1, min1 = 1001;
        for (int i = 0; i < s.length(); i++)
        {
            for (int j = 0; j <= s.length(); j++)
            {
                if (s[i] == s[j])
                {
                    cnt[i]++;
                }
            }
        }
        for (int i = 0; i < s.length(); i++)
        {
            if (cnt[i] > max1)
            {
                max1 = cnt[i];
            }
            if (cnt[i] < min1)
            {
                min1 = cnt[i];
            }
        }
        cout << max1 - min1 << endl;
        return 0;
    }
    C

    const int N = 1010;
    int cnt[26];
    char a[N];
    char b[27] = {"abcdefghijklmnopqrstuvwxyz"};

    int main()
    {
        cin >> a;
        for (int i = 0; i < 26; i++)
            for (int j = 0; a[j]; j++)
                if (b[i] == a[j + 1])
                    cnt[i]++;

        int maxn = 0, minn = 1000;
        for (int i = 0; i <= 26; i++)
            if (cnt[i])
            {
                maxn = max(maxn, cnt[i]);
                minn = min(minn, cnt[i]);
            }

        cout << maxn - minn << endl;
        return 0;
    }
     

    Dint main()
    {
        char s[1000];
        scanf("%s", &s);
        int len = strlen(s);
        int helper[256] = {0};
        int max = 0, min = len;
        for (int i = 0; i < len; i++)
        {
            helper[s[i]]++;
        }
        for (int i = 0; i < 256; i++)
        {
            if (helper[i] > max)
            {
                max = helper[i];
            }
            if (helper[i] < min && helper[i] != 0)
            {
                min = helper[i];
            }
        }
        printf("%d\n", max - min);
        return 0;
    }

    答案:

    1. const int N = 1010;
    2. int cnt[26];
    3. char a[N];
    4. char b[27] = {"abcdefghijklmnopqrstuvwxyz"};
    5. int main()
    6. {
    7. cin >> a;
    8. for (int i = 0; i < 26; i++)
    9. for (int j = 0; a[j]; j++)
    10. if (b[i] == a[j + 1])
    11. cnt[i]++;
    12. int maxn = 0, minn = 1000;
    13. for (int i = 0; i <= 26; i++)
    14. if (cnt[i])
    15. {
    16. maxn = max(maxn, cnt[i]);
    17. minn = min(minn, cnt[i]);
    18. }
    19. cout << maxn - minn << endl;
    20. return 0;
    21. }

  • 相关阅读:
    Redis为什么变慢了?如何排查Redis性能问题
    云原生爱好者周刊:你对 K8s 集群升级有信心吗?
    C语言:用函数求字符串的有效长度
    传感器工作原理
    关于const的用法简单举列子介绍
    追问+初心阅读笔记
    Metasploit(msf)利用ms17_010(永恒之蓝)出现Encoding::UndefinedConversionError问题
    32. 最长有效括号 java解决
    Vue中如何进行图像处理与图像滤镜
    Go-Windows环境的快速搭建
  • 原文地址:https://blog.csdn.net/mooczhimahu/article/details/126556513