题解 | #统计每个月兔子的总数#

学英语

http://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc

public class LearnEnglish {
    public static Map<Integer, String> map = new HashMap<Integer, String>() {
        {
            put(0, "zero");
            put(1, "one");
            put(2, "two");
            put(3, "three");
            put(4, "four");
            put(5, "five");
            put(6, "six");
            put(7, "seven");
            put(8, "eight");
            put(9, "nine");
            put(10, "ten");
            put(11, "eleven");
            put(12, "twelve");
            put(13, "thirteen");
            put(14, "fourteen");
            put(15, "fifteen");
            put(16, "sixteen");
            put(17, "seventeen");
            put(18, "eighteen");
            put(19, "nineteen");
            put(20, "twenty");
            put(30, "thirty");
            put(40, "forty");
            put(50, "fifty");
            put(60, "sixty");
            put(70, "seventy");
            put(80, "eighty");
            put(90, "ninety");
            put(100, "hundred");
            put(1000, "thousand");
            put(1000000, "million");
            put(1000000000, "billion");
        }
    };

    public static void main(String[] args) {
        Scanner sa = new Scanner(System.in);
        while (sa.hasNext()) {
            Integer n = sa.nextInt();
            List<Integer> list1 = new ArrayList<>();
            List<Integer> list2 = new ArrayList<>();
            while (n > 0) {
                Integer ll = n % 1000;
                Integer width = new Integer(1);
                String temp=String.valueOf(String.format("%03d",ll));
                char cs[]=temp.toCharArray();
                for(int i=cs.length-1;i>=0;i--){
                    list1.add(Integer.valueOf(String.valueOf(cs[i])));
                    list2.add(width);
                    width *= 10;
                }
                n /= 1000;
            }

            List<String> sb = new ArrayList<>();
            for (int i = 0; i < list1.size(); i++) {
                String temp;
                if (list2.get(i) > 10 && list1.get(i) != 0) {//百位
                    temp = map.get(list1.get(i)) + " " + map.get(list2.get(i));
                    sb.add(temp);
                } else if (list2.get(i) == 10 && list1.get(i) != 0) {//十位
                    if(i+1<list1.size()&&list1.get(i+1) == 0){
                        if(list1.get(i)>1){
                            temp = map.get(list1.get(i) * 10);
                            sb.add(temp);
                        }else if(list1.get(i)==1&&i-1>=0&&list1.get(i-1)==0){//处理整数10
                            temp = map.get(list1.get(i) * 10);
                            sb.add(temp);
                        }
                    }else{
                        if(list1.get(i)>1){
                            temp = "and " + map.get(list1.get(i) * 10);
                            sb.add(temp);
                        }else if(list1.get(i)==1&&i-1>=0&&list1.get(i-1)==0){
                            temp = "and " + map.get(list1.get(i) * 10);
                            sb.add(temp);
                        }
                    }

                } else if (list2.get(i) == 1 && list1.get(i) != 0) {//个位
                    if(i+1<list1.size()&&list1.get(i+1) == 0){
                        temp ="and " +map.get(list1.get(i));
                    }else if(i+1<list1.size()&&list1.get(i+1) == 1){
                        temp ="and " +map.get(list1.get(i)+10);
                    }
                    else temp = map.get(list1.get(i));
                    sb.add(temp);
                }
                //加上千及以上的单位
                if (i == 2) {
                    sb.add(map.get(1000));
                } else if (i == 5) {
                    sb.add(map.get(1000000));
                } else if (i == 8) {
                    sb.add(map.get(1000000000));
                }
            }
            StringBuilder ss=new StringBuilder();
            for (int i = sb.size() - 1; i >= 0; i--) {
                if (i == sb.size() - 1) {
                    if (sb.get(i).equals("thousand") || sb.get(i).equals("million") || sb.get(i).equals("billion"))
                        continue;
                    else ss.append(sb.get(i) + " ");
                } else if (i == 0) ss.append(sb.get(i));
                else ss.append(sb.get(i) + " ");
            }
            String ofsd=ss.toString();
            String sub=ofsd.substring(0,ofsd.indexOf(" "));
            if(sub.equals("and"))System.out.println(ofsd.substring(ofsd.indexOf(" ")+1));
            else System.out.println(ofsd);
        }
    }
}

感觉就是个纯体力活,把所有边界条件通过调试一一完善就通过了,实在费时间,考试估计时间有点紧

全部评论

相关推荐

头像
04-27 15:11
已编辑
华东师范大学 算法工程师
暑期实习从2月开始投,面了两个月,流程该挂的都挂完了,腾讯字节一共号称是1.7w个hc,不知道都发给谁了,估计今年秋招要难顶。Timeline米哈游、美团、蚂蚁、微软等公司直接简历挂穿,没进面。携程:3.3&nbsp;投递、测评3.12&nbsp;笔试3.18&nbsp;一面3.25&nbsp;二面4.13&nbsp;ai面(hr面)4.14&nbsp;英语测评4.23&nbsp;offer(已拒)腾讯:2.6&nbsp;测评2.28&nbsp;wxg一面3.5&nbsp;wxg二面(挂)3.11&nbsp;teg一面3.21&nbsp;teg二面(取消)3.31&nbsp;teg一面4.10&nbsp;teg二面(挂)4.21&nbsp;wxg一面4.24&nbsp;wxg二面(挂)字节:1.28&nbsp;aml约面(取消)3.17&nbsp;火山一面(挂)4.8&nbsp;aml一面(挂)4.20&nbsp;抖音data一面(挂)阿里:3.23&nbsp;投递、测评3.28&nbsp;笔试3.31&nbsp;淘天一面4.8&nbsp;钉钉一面4.9&nbsp;淘天二面4.10&nbsp;阿里控股一面4.12&nbsp;钉钉二面(取消)4.15&nbsp;淘天hr面4.16&nbsp;淘天offer(已接)4.21&nbsp;高德一面(取消)4.22&nbsp;淘宝闪购一面(取消)面试最大的感触是,现在撞上ai转型,一堆老业务急着转向,新业务非常不成熟,研究型的组bar非常高根本进不去,业务侧挂着算法的岗位干的都是工程活,面试却又要问算法,另外agent的落地也远没有那么广,绝大多数还是那套写死的系统调一下llm&nbsp;api或者做做rag,其余少部分真的在搭agent的,基本不能在线上服务用什么很智能的模型,现阶段成本太高,进去大概率就是给垃圾模型从工程方面兜底,除了业务场景的应用和数据经验以外,技术方面很难有什么提升。算法岗做不了基模的还是去搜广推好,之前判断失误了完全没投,秋招不知道还进不进得去。
紫炁:一样的感受,现在很混乱尤其业务侧开发和算法界限模糊,不知道秋招投哪个方向了
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务