华为机考笔记之字符串以水仙花规则拆分

题目:
一.输入一组字符串, 求字符串分组后,每组的和为水仙花数
(注:水仙花数是一个三位数 其个位、十位、百位的立次方 的和等于自身  如 371 = 3^3 + 7^3 + 1^1 )
(1)  如果无法找到该分组 ,返回0 ;
(2)  找到该分组,切分组不唯一 ,返回 -1;

(3)分组唯一 ,则返回分组的组数 ;

首次参加华为机考,遇到这个题,明人不说暗话,当时没完全做出来,哈哈,卡在了如何确定分组不唯一的问题上,哎,还是自己太菜了,还需要多学习哈。废话不多说,以下是我后来想到的一种实现方式:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Main{
    
    public static boolean isShuixian(int num) {
        if(Integer.toString(num).length() != 3) {
            return false;
        }
        int a = num / 100;
        int b = num % 100 / 10;
        int c = num % 10;
        return Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == num;
    }
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<int[]> list = new ArrayList<int[]>();
        while(in.hasNext()) {
            String str = in.nextLine();
            for(int l = 0; l < str.length(); l++) {
                for(int r = l; r < str.length(); r++) {
                    int num = 0;
                    for(int i = l; i <= r; i++) {
                        num += str.charAt(i);
                    }
                    int len = Integer.toString(num).length();
                    if(len < 3) {
                        continue;
                    }
                    if(len > 3) {
                        break;
                    }
                    if(isShuixian(num)) {
                        list.add(new int[] {l, r});
                    }
                }
            }
            int cnt = list.size();
            if(cnt <= 1) {
                System.out.println(cnt);
            }
            else {
                for(int i = 0; i < cnt - 1; i++) {
                    for(int j = i + 1; j < cnt; j++) {
                        int[] pointi = list.get(i);
                        int[] pointj = list.get(j);
                        if((pointi[0] >= pointj[0] && pointi[0] <= pointj[1])
                                || (pointi[1] >= pointj[0] && pointi[1] <= pointj[1])) {
                            System.out.println(-1);
                            return;
                        }
                    }
                }
                System.out.println(cnt);
            }
        }
        
    }
}

肯定还有更好的方式,我这只是抛砖引玉哈,希望各位同仁各位大神多多指点,多谢多谢哈~~~

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
华为机考 Python 是指华为公司在招聘过程中,通过使用机器进行考核Python编程能力。这种形式的考试采用了自动化的方式,可以帮助华为更高效地筛选出具备优秀Python编程能力的应聘者。 华为机考 Python 主要围绕Python编程语言进行,通过将考生放在一台电脑前,让其完成一系列的编程任务。这些任务可能包括基本的语法和控制语句的理解和运用,常见的数据结构和算法的实现,以及利用Python进行文件操作,网络编程等方面的能力。 相较于传统的面试方式,华为机考 Python 的好处在于它可以快速、客观地评估应聘者的Python编程能力。通过使用机器评分系统,可以对每个考生的答题情况进行统一的评估。这样一方面可以提高效率,节省人力成本,另一方面也可以避免因个人主观因素对考试结果的影响。 对于应聘者而言,参加华为机考 Python 不仅是一种展示自己编程能力的机会,也是锻炼自己代码编写和调试能力的机会。因此,在参加机考前,应聘者应该对Python编程语言进行充分的学习和准备,熟悉Python的语法规则、常用的数据结构和算法,并且掌握一定的调试技巧和如何解决常见编程问题的能力。 总之,华为机考 Python 是华为公司在招聘过程中采用的一种自动化考核方式,可以帮助公司更高效地筛选出具备优秀Python编程能力的应聘者。对于应聘者而言,参加机考前应该做好充分准备,以展示自己的编程实力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值