一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 8512|回复: 22
收起左侧

[找工就业] 悬赏 epic的OA一道题 additive number

[复制链接] |试试Instant~ |关注本帖
jackjiang2 发表于 2014-10-3 05:43:01 | 显示全部楼层 |阅读模式
400小米
题目如下:
4.Additive numbers are defined to be a positive integer whose digits form an. From 1point 3acres bbs
additive sequence. E.g. 11235 (1+1=2, 1+2=3, 2+3=5). What makes it
difficult is that 12,122,436 is also one (12+12=24, 12+24=36). Given a range
of integers, find all the additive numbers in that range.



脑子转不动了,刚看完一个童鞋的OA面经 赶脚还是不对 所以求详细思路 如果有代码最好(java)


OA在即 只好无耻伸手了


木有多少小米 悬赏400小米


求!!!!. Waral 鍗氬鏈夋洿澶氭枃绔,


补充内容 (2014-10-2 16:49):
噗 为毛在版上面没找到我的悬赏 难道是木有了么

最佳答案

查看完整内容

测试: 补充内容 (2014-10-3 08:24): 忘了带上类声明了,自己套上吧。 补充内容 (2014-10-3 08:27): 忘了是个range了,在外面套个函数调用这个public的函数即可。
hakase 发表于 2014-10-3 05:43:02 | 显示全部楼层
  1.     public static boolean isAdditiveNumber(final int number){
  2.         if(number < 100){
  3.             return false;
  4.         }else{
  5.             return isAdditiveNumberHelper(number);
  6.         }.鏈枃鍘熷垱鑷1point3acres璁哄潧
  7.     }
  8.     private static boolean isAdditiveNumberHelper(final int number){. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  9.         final int length = (int)(Math.log10(number) + 1);
  10.         for(int splitLength = 1; splitLength <= (length / 2); splitLength++){. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  11.             if(isAdditive(intToIntegerArray(number, splitLength))){
  12.                 return true;
  13.             }
  14.         }
  15.         return false;
  16.     }. 1point3acres.com/bbs
  17.     private static boolean isAdditive(ArrayList<Integer> numberList){
  18.         if(numberList == null || numberList.size() < 3){
  19.             return false;
  20.         }-google 1point3acres
  21.         for(int index = 0; index < numberList.size() - 2; index++){
  22.             final int a = numberList.get(index);
  23.             final int b = numberList.get(index + 1);
  24.             final int c = numberList.get(index + 2);
  25. . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  26.             if(a + b != c){.鐣欏璁哄潧-涓浜-涓夊垎鍦
  27.                 return false;. from: 1point3acres.com/bbs
  28.             }
  29.         }
  30.         return true;
  31.     }
  32.     private static ArrayList<Integer> intToIntegerArray(final int numberToConvert, final int digitNumInEachElement){
  33.         if(numberToConvert < 100){
  34.             return null;
  35.         }
  36.         if(digitNumInEachElement <= 0){
  37.             return null;. 鍥磋鎴戜滑@1point 3 acres
  38.         }else{
  39.             final int length = (int)(Math.log10(numberToConvert) + 1);
  40.             ArrayList<Integer> resultList = null;
  41.             if(length % digitNumInEachElement == 1){
    . from: 1point3acres.com/bbs
  42.                 final int lastDigit = numberToConvert % 10;
  43.                 resultList = splitHelper(numberToConvert / 10, digitNumInEachElement);
  44.                 final int lastIndex = resultList.size() - 1;
  45.                 resultList.set(lastIndex, resultList.get(lastIndex) * 10 + lastDigit);
  46.             }else if(length % digitNumInEachElement == 0){. 鍥磋鎴戜滑@1point 3 acres
  47.                 resultList = splitHelper(numberToConvert, digitNumInEachElement);
  48.             }
  49.             return matchLength(digitNumInEachElement, resultList) ? resultList : null;
  50.         }
  51.     }
  52.     private static ArrayList<Integer> splitHelper(final int numberToConvert, final int digitNumInEachElement){
  53.         final int divider = (int)Math.pow(10, digitNumInEachElement);
    . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  54.         int numToProcess = numberToConvert;
  55.         ArrayList<Integer> resultList = new ArrayList<Integer>();
  56.         while(numToProcess != 0){
  57.             resultList.add(0, numToProcess % divider);
  58.             numToProcess /= divider;
  59.         }
  60.         return resultList;
  61.     }
  62.     private static boolean matchLength(final int requiredLen, ArrayList<Integer> listToCheck){
  63.         for(int element : listToCheck){
  64.             if(element == 0){
  65.                 continue;
  66.             }else{
  67.                 if(element < (int) Math.pow(10, requiredLen - 1)){
  68.                     return false;
  69.                 }
  70.             }
  71.         }. more info on 1point3acres.com
  72.         return true;
  73.     }
复制代码
测试:
  1.         // True
  2.         System.out.println(GoogleOctFirst.isAdditiveNumber(112));
  3.         System.out.println(GoogleOctFirst.isAdditiveNumber(11235));
  4.         System.out.println(GoogleOctFirst.isAdditiveNumber(12122436));
    . 1point 3acres 璁哄潧
  5.         // False
  6.         System.out.println(GoogleOctFirst.isAdditiveNumber(111));.鐣欏璁哄潧-涓浜-涓夊垎鍦
  7.         System.out.println(GoogleOctFirst.isAdditiveNumber(113));
  8.         System.out.println(GoogleOctFirst.isAdditiveNumber(12345));. 1point3acres.com/bbs
  9.         System.out.println(GoogleOctFirst.isAdditiveNumber(11237));
复制代码
. more info on 1point3acres.com
补充内容 (2014-10-3 08:24):
忘了带上类声明了,自己套上吧。

补充内容 (2014-10-3 08:27):
忘了是个range了,在外面套个函数调用这个public的函数即可。

评分

1

查看全部评分

回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 07:15:07 | 显示全部楼层
如有满意滴答案 必然疯狂评分。求 各位缺大米的大神解决
回复

使用道具 举报

peter1027 发表于 2014-10-3 09:04:23 | 显示全部楼层
        public static boolean isAdditiveNumber(String number)
        {
                for(int i=1;i<number.length();i++)
                {. From 1point 3acres bbs
                        int part1 = Integer.parseInt(number.substring(0,i));
                        for(int j=i+1;j<number.length();j++) 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
                        {
                                int part1_tmp = Integer.parseInt(number.substring(0,i));
                                int part2 = Integer.parseInt(number.substring(i,j));
                                int index= j;. visit 1point3acres.com for more.
                                int rest  = Integer.parseInt(number.substring(j,number.length())); 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
                                while(part1_tmp+part2<=rest)
                                {
                                        int part3 = part1_tmp+part2;
                                        String str = (new Integer(part3)).toString();
                                        int length = str.length();
                                        if(index + length > number.length())
                                        {
                                                break;
                                        }
                                        if(number.substring(index,index+length).equals(str))
                                        {
                                                index=length+index;.鐣欏璁哄潧-涓浜-涓夊垎鍦
                                                if(index==number.length())
                                                {
                                                        return true;
                                                }
                                                part1_tmp = part2;
                                                part2 = part3;
                                                rest = Integer.parseInt(number.substring(index,number.length()));
                                        }
                                        else
                                        {
                                                break;
                                        }
                                }
                        }
                } 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
                return false;
        }

评分

1

查看全部评分

回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 09:39:59 | 显示全部楼层
hakase 发表于 2014-10-2 19:18
测试:. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴

补充内容 (2014-10-3 08:24):
-google 1point3acres
摸摸哒  小弟给大神跪一个先 明天我测试一下 能用 就采纳 摸摸哒 今天评分用完了 必然再补上20大米
回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 09:41:19 | 显示全部楼层
peter1027 发表于 2014-10-2 20:04
public static boolean isAdditiveNumber(String number)
        {. more info on 1point3acres.com
                for(int i=1;i

少年 好遗憾 上面的兄弟 早你一步 等我每天的评分恢复回来 必然送上20 大米 如果你能等的话
回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 09:47:24 | 显示全部楼层
下面的同志不好意思了 小弟 等级太低 每天评分太少 只能给上面两位评分
悬赏的话 我估计第一个回复的大神八成以上是对的 很大概率悬赏给他了
如果上面两位答案有很大的出入的话 悬赏才能出现在楼下抱歉. Waral 鍗氬鏈夋洿澶氭枃绔,
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
进版都是缘分.鏈枃鍘熷垱鑷1point3acres璁哄潧

.鐣欏璁哄潧-涓浜-涓夊垎鍦
回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 09:49:20 | 显示全部楼层
peter1027 发表于 2014-10-2 20:04
public static boolean isAdditiveNumber(String number)
        {
                for(int i=1;i

少年 你最好发一个主题 要不然我评分也找不到地方 0.0 再次感谢回答我的问题
回复

使用道具 举报

hakase 发表于 2014-10-3 09:58:34 | 显示全部楼层
jackjiang2 发表于 2014-10-3 09:39
摸摸哒  小弟给大神跪一个先 明天我测试一下 能用 就采纳 摸摸哒 今天评分用完了 必然再补上20大米

售后服务,打个补丁。超过八位数的时候可能有nullException。
  1.     private static ArrayList<Integer> intToIntegerArray(final int numberToConvert, final int digitNumInEachElement){
  2.         if(numberToConvert < 100){
  3.             return null;
  4.         }
  5.         if(digitNumInEachElement <= 0){
  6.             return null;
  7.         }else{
  8.             final int length = (int)(Math.log10(numberToConvert) + 1);
  9.             ArrayList<Integer> resultList = null;
  10.             if(length % digitNumInEachElement == 1){
  11.                 final int lastDigit = numberToConvert % 10;
  12.                 resultList = splitHelper(numberToConvert / 10, digitNumInEachElement);
  13.                 final int lastIndex = resultList.size() - 1;
  14.                 resultList.set(lastIndex, resultList.get(lastIndex) * 10 + lastDigit);
  15.             }else if(length % digitNumInEachElement == 0){
  16.                 resultList = splitHelper(numberToConvert, digitNumInEachElement);
  17.             }
  18.             // When number is very long, resultList may be null; Since (xxx + xxx) will never equals to xxxxx;
  19.             if(resultList == null){
  20.                 return null;
  21.             }
  22.             return matchLength(digitNumInEachElement, resultList) ? resultList : null;. 1point3acres.com/bbs
  23.         }
  24.     }
复制代码

评分

1

查看全部评分

回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 10:18:23 | 显示全部楼层
hakase 发表于 2014-10-2 20:58
售后服务,打个补丁。超过八位数的时候可能有nullException。
. 1point3acres.com/bbs
么么哒。这epic的oa一点也不水呀 好难的说
回复

使用道具 举报

peter1027 发表于 2014-10-6 23:19:33 | 显示全部楼层
jackjiang2 发表于 2014-10-2 20:41
少年 好遗憾 上面的兄弟 早你一步 等我每天的评分恢复回来 必然送上20 大米 如果你能等的话

OK 希望你OA顺利!

评分

1

查看全部评分

回复

使用道具 举报

Allenping 发表于 2014-10-17 09:20:09 | 显示全部楼层
我 想 问一下 哪里 有看 Epic OA 的 帖子 链接, 求 题目, 马上要做了
回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-17 10:00:55 | 显示全部楼层
Allenping 发表于 2014-10-16 20:20
我 想 问一下 哪里 有看 Epic OA 的 帖子 链接, 求 题目, 马上要做了

careercup 网站 搜索 epic system就ok
回复

使用道具 举报

charles901030 发表于 2014-10-20 07:07:43 | 显示全部楼层
请问楼主 11112算是additive number吗 因为11+1=12
回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-20 07:57:38 | 显示全部楼层
charles901030 发表于 2014-10-19 18:07. Waral 鍗氬鏈夋洿澶氭枃绔,
请问楼主 11112算是additive number吗 因为11+1=12

算 0.0 你可以用第二个答案 就是 比较简洁的那个 那个我测试了好几个数字都是对的 . 1point 3acres 璁哄潧
题目的话会给你一个范围 然后你for这个范围 挨个判断是不是可加数 就行了 。。。。。。
回复

使用道具 举报

cow12331 发表于 2014-10-28 11:20:50 | 显示全部楼层
peter1027 发表于 2014-10-3 09:04
public static boolean isAdditiveNumber(String number)
        {
                for(int i=1;i

”12345“ 就死循环了。。 这题要分割是固定长度吗? 12 1 13这种算不算
回复

使用道具 举报

fangxuke19 发表于 2014-11-13 05:49:59 | 显示全部楼层
peter1027 发表于 2014-10-3 09:04
public static boolean isAdditiveNumber(String number). 1point 3acres 璁哄潧
        {
                for(int i=1;i
-google 1point3acres
我不知道1212246这个算不算?12+12=24;2+4=6如果可以的话你这个程序不对啊
回复

使用道具 举报

fangxuke19 发表于 2014-11-13 06:23:38 | 显示全部楼层
稍微改了一下peter的代码
  1. public static boolean isAdditiveNumber(String nums)
  2.     {   
  3.         int len = nums.length();
  4.         if(len<=1) return true;
  5.         for(int i=1;i<len;i++)
  6.         {
  7.             String p1 = nums.substring(0,i); 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  8.             for(int j=i+1;j<len;j++)
  9.             {
  10.                 String p2 = nums.substring(i,j);
  11.                 String p3 =String.valueOf(Integer.parseInt(p1)+Integer.parseInt(p2));. more info on 1point3acres.com
  12.                 int index = j+1;
  13.                 int temp_j = j;
  14.                 while(len-temp_j>=p3.length())
  15.                 {. from: 1point3acres.com/bbs
  16.                     if(index>len) break;
  17.                     if(p3.equals(nums.substring(temp_j,index))). Waral 鍗氬鏈夋洿澶氭枃绔,
  18.                     {
  19.                         int temp_i= i;
  20.                         while(temp_i<len&&temp_i<index)
  21.                         {
  22.                             if(isAdditiveNumber(nums.substring(temp_i,len)))
  23.                                 return true;
  24.                             temp_i++;
  25.                         }

  26.                        
  27.                     }
  28.                     index++;
  29.                 }
  30.             }. 1point3acres.com/bbs
  31.         }
  32.         return false;
  33.     }
复制代码
回复

使用道具 举报

头像被屏蔽
jy02677290 发表于 2014-11-15 07:56:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

xzt8350 发表于 2015-1-15 04:43:17 | 显示全部楼层
楼主,这题不应该是return 最后这个 list么,为啥答案都return true和false?
回复

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-6 20:25

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表