lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 题目

读题

HJ45 名字的漂亮度

 

考查点

 

2. 解法

思路

 计算字符串中每个字母出现的次数几种方法 

代码逻辑

 

具体实现

首先,我们需要定义一个方法来计算一个字符串的漂亮度。漂亮度是指字符串中每个字母出现的次数乘以它在字母表中的位置,然后求和。例如,字符串"ABC"的漂亮度是11 + 22 + 3*3 = 14。

我们可以用一个数组来存储每个字母出现的次数,然后用一个循环来遍历字符串,更新数组。然后,我们再用一个循环来计算漂亮度,根据字母的位置加上相应的值。

代码如下:

//定义一个方法,参数是字符串,返回值是漂亮度
public static int beauty(String s) {
  //定义一个长度为26的数组,存储每个字母出现的次数
  int[] count = new int[26];
  //将字符串转换为大写,方便处理
  s = s.toUpperCase();
  //遍历字符串,更新数组
  for (int i = 0; i < s.length(); i++) {
    //获取当前字符
    char c = s.charAt(i);
    //如果是字母,就在对应的位置加一
    if (c >= 'A' && c <= 'Z') {
      count[c - 'A']++;
    }
  }
  //定义一个变量,存储漂亮度
  int beauty = 0;
  //遍历数组,计算漂亮度
  for (int i = 0; i < count.length; i++) {
    //如果当前字母出现了,就加上它的位置乘以次数
    if (count[i] > 0) {
      beauty += (i + 1) * count[i];
    }
  }
  //返回漂亮度
  return beauty;
}

然后,我们可以调用这个方法,传入"HJ45"作为参数,打印出结果:

public static void main(String[] args) {
  //调用方法,传入"HJ45"
  int result = beauty("HJ45");
  //打印结果
  System.out.println(result);
}

运行这段代码,输出是:

98

 

自行实现

public class HJ045 {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
String[] names = new String[n];
for (int i = 0; i < n; i++) {
names[i] = sc.nextLine();
}
calGrade(names);
}

public static int[] calGrade(String[] names) {
int n = names.length;
int[] grades = new int[n];
for (int i = 0; i < n; i++) {
grades[i] = calGrade(names[i]);
System.out.println(grades[i]);
}
return grades;

}

public static int calGrade(String name) {
name = name.toLowerCase();
int[] fre = new int[26];
for (char c : name.toCharArray()) {
fre[c - 'a'] += 1;
}

Arrays.sort(fre);
int grade = 0;
int initial = 26;
for (int i = 25; i >=0; i--) {
if (fre[i] == 0) {
break;
}
grade += initial * fre[i];
initial--;
}
return grade;
}
}

3. 总结

posted on 2023-07-21 16:07  白露~  阅读(30)  评论(0编辑  收藏  举报