zoukankan      html  css  js  c++  java
  • HW--漂亮度2(测试通过)

     总结:几个函数的使用

    (1)  int num=Integer.parseInt(str[0]); //将第一个字符串转成整形数,表示名字个数

    (2) String string1=str[i].toLowerCase(); //变小写都

    (3)  char ch[]=string1.toCharArray(); //将每一个字符串转成相印的字符数组

    (4)  String st=Integer.toString( num1[p]); //将int型转换成字符串型

      (5)   算法层面:计算出每个名字字母出现的个数,排序后,直接按照排序后的计数进行计算就行了,计数最多的是26,一次递减就行了

    描述

    给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
    每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
    给出多个名字,计算每个名字最大可能的“漂亮度”。

    知识点 字符串
    运行时间限制 0M
    内存限制 0
    输入

    整数N,后续N个名字

    N个字符串,每个表示一个名字

    输出

    每个名称可能的最大漂亮程度

    样例输入 2 zhangsan lisi
    样例输出 192 101

    个人电脑测试版本:

    package huawei4;
    import java.util.Scanner;
    public class Beautiful {    
        public static void main(String[] args){
            System.out.println("请输入样例:");
            Scanner scStr=new Scanner(System.in);
            String in=scStr.nextLine();
            String str[]=in.split(" "); //存起来,空格分割;          
            int num=Integer.parseInt(str[0]);  //将第一个字符串转成整形数,表示名字个数
            
            int num1[]=new int[num];           //存放每一个名字的漂亮度
            for(int i=1;i<=num;i++) {
                int tmp[]=new int[26];                //存放每个名字26个字母分别出现的个数
                String string1=str[i].toLowerCase();  //变小写都
                char ch[]=string1.toCharArray();      //将每一个字符串转成相印的字符数组
                for(int j=0;j<str[i].length();j++){  // 统计个数
                     int k=ch[j]-'a';
                     if((k>=0)&&(k<=26)){
                     tmp[k]++;  //如果在这个范围内加1;
                    }
                }
                //冒泡对tmp
                int tmp2;
                for(int p=tmp.length-1;p>0;p--){
                    for(int q=0;q<p;q++){
                        if(tmp[q+1]<tmp[q]){
                            tmp2=tmp[q];
                            tmp[q]=tmp[q+1];
                            tmp[q+1]=tmp2;
                        }
                    }
                }
                //不需要在计算每个字母了,直接遍历字母个数
                for(int k=0;k<tmp.length;k++) {                      
                         num1[i-1]=num1[i-1]+tmp[k]*(26+k-25);  //如果在这个范围内加1;
                       }
            }  
            StringBuffer tt=new StringBuffer();
            for(int p=0;p<num;p++){
                String st=Integer.toString( num1[p]); //将int型转换成字符串型
                tt.append(st);
                if(p!=num-1)
                    tt.append(" ");  //空格,如果不是最后一个名字
            }      
            System.out.print(tt);
    //        for(int p=0;p<num;p++){
    //            System.out.println(num1[p]);
    //        }
            
        }    
    }

    华为在线OJ版本:

    华为测试注意事项:

    1、字符串输入的时候一定要用next(),不要使用nextLine();区别是next()可以以空格和enter键当作 分界线

         试验后发现next()方法是以换行或者空格符为分界线接收下一个String类型变量。 

    2、输出的时候多行输出的时候换行输出,不要在一行输出,如果一定在一行输出,考虑用print,不要用println

    别人的说明:Java的使用Scanner的next()不要用nextline(),再将结果换行输出,应该就可以了;顶,真的就是这个问题
    package huawei4;
    
    
    import java.util.Scanner;  
    public class Beautiful{      
        public static void main(String[] args){  
             
            Scanner scStr=new Scanner(System.in);  
            int num=scStr.nextInt();   //名字个数 
            String name[]=new String[num]; //定义一个字符串数组
            for(int k=0;k<num;k++){            
                 name[k]=scStr.next();    //
            }          
            int num1[]=new int[num];                   //存放每一个名字的漂亮度  
            for(int i=0;i<num;i++) {  
                int tmp[]=new int[26];                //存放每个名字26个字母分别出现的个数             
               // String string1=str[i].toLowerCase();  //变小写都  
                char ch[]=name[i].toCharArray();      //将每一个字符串转成相印的字符数组  
                for(int j=0;j<name[i].length();j++){  // 统计个数  
                    int k=0; 
                    if(ch[j]>='a'&&ch[j]<='z'){
                          k=ch[j]-'a'; 
                     }
                     else
                         k=ch[j]-'A';             
                     if((k>=0)&&(k<=26)){  
                     tmp[k]++;  //如果在这个范围内加1;  
                    }  
                }  
                //冒泡对tmp  
                int tmp2;  
                for(int p=tmp.length-1;p>0;p--){  
                    for(int q=0;q<p;q++){  
                        if(tmp[q+1]<tmp[q]){  
                            tmp2=tmp[q];  
                            tmp[q]=tmp[q+1];  
                            tmp[q+1]=tmp2;  
                        }  
                    }  
                }  
                //不需要在计算每个字母了,直接遍历字母个数  
                for(int k=0;k<tmp.length;k++) {                    
                       num1[i]=num1[i]+tmp[k]*(26+k-25);  //如果在这个范围内加1;  
                     }  
            }    
            for(int p=0;p<num;p++){
                System.out.println(num1[p]);
            } 
              
        }      
    } 
  • 相关阅读:
    【leetcode】1295. Find Numbers with Even Number of Digits
    【leetcode】427. Construct Quad Tree
    【leetcode】1240. Tiling a Rectangle with the Fewest Squares
    【leetcode】1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
    【leetcode】1291. Sequential Digits
    【leetcode】1290. Convert Binary Number in a Linked List to Integer
    【leetcode】1269. Number of Ways to Stay in the Same Place After Some Steps
    【leetcode】1289. Minimum Falling Path Sum II
    【leetcode】1288. Remove Covered Intervals
    【leetcode】1287. Element Appearing More Than 25% In Sorted Array
  • 原文地址:https://www.cnblogs.com/snowwhite/p/4736137.html
Copyright © 2011-2022 走看看