一亩三分地论坛

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

一亩三分地官方iOS手机应用下载
查看: 9014|回复: 22
收起左侧

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

[复制链接] |试试Instant~ |关注本帖
jackjiang2 发表于 2014-10-3 05:43:01 | 显示全部楼层 |阅读模式
400小米
题目如下:. 1point3acres.com/bbs
4.Additive numbers are defined to be a positive integer whose digits form an
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)

. 1point3acres.com/bbs
OA在即 只好无耻伸手了


木有多少小米 悬赏400小米


求!!!!
.鐣欏璁哄潧-涓浜-涓夊垎鍦
-google 1point3acres
补充内容 (2014-10-2 16:49):
噗 为毛在版上面没找到我的悬赏 难道是木有了么

最佳答案

查看完整内容

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

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

评分

1

查看全部评分

回复

使用道具 举报

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

使用道具 举报

peter1027 发表于 2014-10-3 09:04:23 | 显示全部楼层
        public static boolean isAdditiveNumber(String number)
.1point3acres缃        {
                for(int i=1;i<number.length();i++)
                {
                        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;
                                int rest  = Integer.parseInt(number.substring(j,number.length()));. Waral 鍗氬鏈夋洿澶氭枃绔,
                                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()). visit 1point3acres.com for more.
                                                {. visit 1point3acres.com for more.
                                                        return true;
                                                }
                                                part1_tmp = part2;
                                                part2 = part3;. 1point3acres.com/bbs
                                                rest = Integer.parseInt(number.substring(index,number.length()));
                                        }. more info on 1point3acres.com
                                        else
                                        {
                                                break;-google 1point3acres
                                        }
                                }
                        }
                }
                return false;
        }

评分

1

查看全部评分

回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 09:39:59 | 显示全部楼层
hakase 发表于 2014-10-2 19:18
测试:. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
补充内容 (2014-10-3 08:24):

摸摸哒  小弟给大神跪一个先 明天我测试一下 能用 就采纳 摸摸哒 今天评分用完了 必然再补上20大米
求职神器indeed - 在全球最大的求职网站找找适合你的工作?
回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 09:41:19 | 显示全部楼层
peter1027 发表于 2014-10-2 20:04. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
public static boolean isAdditiveNumber(String number)
        {
                for(int i=1;i

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

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 09:47:24 | 显示全部楼层
下面的同志不好意思了 小弟 等级太低 每天评分太少 只能给上面两位评分
悬赏的话 我估计第一个回复的大神八成以上是对的 很大概率悬赏给他了.鐣欏璁哄潧-涓浜-涓夊垎鍦
如果上面两位答案有很大的出入的话 悬赏才能出现在楼下抱歉

进版都是缘分


回复

使用道具 举报

 楼主| 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;. Waral 鍗氬鏈夋洿澶氭枃绔,
  21.             }
  22.             return matchLength(digitNumInEachElement, resultList) ? resultList : null;
  23.         }
  24.     }
复制代码

评分

1

查看全部评分

回复

使用道具 举报

 楼主| jackjiang2 发表于 2014-10-3 10:18:23 | 显示全部楼层
hakase 发表于 2014-10-2 20:58
售后服务,打个补丁。超过八位数的时候可能有nullException。

么么哒。这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
请问楼主 11112算是additive number吗 因为11+1=12

算 0.0 你可以用第二个答案 就是 比较简洁的那个 那个我测试了好几个数字都是对的
题目的话会给你一个范围 然后你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) 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
        {
                for(int i=1;i

我不知道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));. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  12.                 int index = j+1;
  13.                 int temp_j = j;
  14.                 while(len-temp_j>=p3.length())
  15.                 {
  16.                     if(index>len) break;
  17.                     if(p3.equals(nums.substring(temp_j,index)))
  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++;. visit 1point3acres.com for more.
  25.                         }
  26. .鏈枃鍘熷垱鑷1point3acres璁哄潧
  27.                        
  28.                     }
  29.                     index++;
  30.                 }
  31.             }
  32.         }
    . 鍥磋鎴戜滑@1point 3 acres
  33.         return false;. 1point 3acres 璁哄潧
  34.     }
复制代码
回复

使用道具 举报

头像被屏蔽
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, 2017-2-26 06:06

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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