• 每日一题:华为初级题库——名字的漂亮度


      <题目要求>

      要求输入N个字符串(由大小写字母组成),要求输出每个字符串的最大“漂亮度”。定义每个字母都有一个不重复的“漂亮度”(即可以从1-26任选一个值),而一个字符串的“漂亮度”,就是累加所有字母的“漂亮度”(字母选择不同的值,“漂亮度”就不同)。

    输入: 2
    zhangsan
    lisi
    输出: 192
    101

      思路:这个题目题意有点深奥,但是读懂了,就会比较简单。“漂亮度”,即给每个字母赋值,要求最大的“漂亮度”,即先统计出现字母的类型以及其个数,然后给个数大的字母赋予大的“漂亮值”。例如:“zhangsan”中,a出现2次,n出现2次,z/h/g/s各出现1次,则给a、n从26、25中取值,给z、h、g、s从24、23、22、21中取值,即可实现取最大“漂亮度”。

      易错点分析:

    (1)在上传答案到华为题库的时候,不要多输入其他废话,按照其要求的输入(先输入N的值,再依次输入N个字符串),按照其要求计算“漂亮度”,再按要求输出(输出字符串的漂亮度);

    (2)一维数组、二维数组在栈中的开辟内存(当然也可以直接在常量区分配,即采用a[3][10]这种形式);

    (3)数组的初始化(若是在定义时,给第一个赋值,即给所有赋值,例如int a[10]={0}的形式,也可采用memset(a,0,sizeof(a)/sizeof(int)),或是利用for语句循环赋值);

    (4)重复利用中间变量的时候,要进行0的初始化;

    (5)在利用变量的时候,for(int i;i<n;i++)这种形式固然好用,但要注意在这之外的非循环体内,是否有int i的定义,即在for语句之外,还有一个int i来记录临时变量,就会导致变量冲突。

    #include <iostream>
    using namespace std;
    int SortTheLetter(int *b);
    int main()
    {
        int n;
        int i=0;
        char *p;
        int t;
        int b[26];//用0-25索引号来表示英文字母
        for(int j=0;j<26;j++)//用数组的值于记录字母出现的个数,此处利用了循环来初始化
        {
            b[j]=0;
        }
        cin>>n;
        int *c=new int[n];//一维数组在堆中分配内存空间的用法
        char **a=new char* [n];//二维数组在堆中分配内存空间的用法,包括以下循环;
        for(int j=0;j<n;j++)
        {
            a[j]=new char[26];
        }
        //若用堆分配内存空间,应为以下:
        //char *a[n];
        while(i<n)
        {
            cin>>a[i];//从字符串中输入字符的时候,是会自动添加‘’这个结尾符号的。
            i++;
        }
    
        i=0;
        while(i<n)
        {
            //cout<<a[i]<<endl;利用char*的特殊性,可以用指针地址,直接输出整个字符串。
            p=a[i];
    
            while(*p!='')
            {
                if('a'<=*p&&*p<='z')
                    t=*p-'a';
                else if('A'<=*p&&*p<='Z')
                    t=*p-'A';
                b[t]++;
                p++;
            }
            c[i]=SortTheLetter(b);
            for(int j=0;j<26;j++)
                b[j]=0;//重新记录的时候,要记得初始化;
            i++;
        }
        i=0;
        while(i<n)
        {
            cout<<c[i]<<endl;
            i++;
        }
        return 0;
    }
    int SortTheLetter(int *b)
    {
        int max;
        int tmp;
        int tmp0=26;
        int sum=0;
        for(int k=0;k<26;k++)
        {
            max=k;
            for(int j=k+1;j<26;j++)
            {
                if(b[j]>b[max])
                {
                    max=j;
                }
            }
            if(k!=max)
            {
                tmp=b[k];
                b[k]=b[max];
                b[max]=tmp;
            }
        }
        for(int i=0;b[i]!=0&&i<26;i++)
        {
            tmp=b[i]*tmp0;
            tmp0--;
            sum+=tmp;
        }
        return sum;
    }
  • 相关阅读:
    UIScrollView设置滑动的距离
    iOS动画效果和实现
    cmd 编码 utf8
    详细的ifcfg-eth0配置详解
    Centos下 Nginx安装与配置
    linux安装目录
    utf8 和 UTF-8 的区别
    后台添加搜索功能讲解
    移动端 禁横向滚动
    PC端 $_SERVER 说明
  • 原文地址:https://www.cnblogs.com/Sophie-nature/p/3676000.html
Copyright © 2020-2023  润新知