May 2009 - May 2017 论坛八周年-你的足迹,我的骄傲


一亩三分地论坛

 找回密码
 获取更多干活,快来注册

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

帮人答题Linkedin

[复制链接] |试试Instant~ |关注本帖
zhenggao1986 发表于 2014-8-10 13:13:23 | 显示全部楼层 |阅读模式

2014(7-9月) 码农类 博士 全职@Linkedin - 猎头 - 技术电面 |Other

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干活,快来注册

x
Given an array of positive integers and two players. In each turn, one player picks up one number and if the sum of all the picked up numbers is greater than a target number, the player wins. Write a program canIWin() to print the result.
Answer:
enum Result {Win, Lose, Draw}
public class PickUpNumbers {
        public static Result canIWin(int[] numberPool, int target) {
                if (target <= 0) return Result.Lose;
                boolean isEmpty = true;
                for (int data : numberPool)
                        if (data > 0) isEmpty = false;
                if (isEmpty) return Result.Draw;
                else {
                        for (int data : numberPool)
                                if (data >= target) return Result.Win;
                        Result drawFlag = Result.Draw, rivalWinFlag = Result.Win;
                        for (int i = 0; i < numberPool.length; ++i) {
                                if (numberPool < 0) continue;
                                int data = numberPool;
                                numberPool = -1;
                                Result rivalResult = canIWin(numberPool, target - data); // rival's turn
                                if (rivalResult != Result.Win) rivalWinFlag = rivalResult;
                                if (rivalResult != Result.Draw) drawFlag = rivalResult;
                                numberPool = data;
                        }
                        if (drawFlag == Result.Draw) return Result.Draw;
                        if (rivalWinFlag == Result.Win) return Result.Lose; // whatever number i choose, rival wins
                        return Result.Win;
                }
        }
}
Test Code:
public static void main(String[] args) {
        int[] numberPool1 = {1, 2, 3};
        System.out.println(PickUpNumbers.canIWin(numberPool1, 5));
        System.out.println(PickUpNumbers.canIWin(numberPool1, 4));
        System.out.println(PickUpNumbers.canIWin(numberPool1, 8));
        int[] numberPool2 = {1, 2, 3, 4, 5};
        System.out.println(PickUpNumbers.canIWin(numberPool2, 11));
        int[] numberPool3 = {1, 2, 3, 4, 5, 6};
        System.out.println(PickUpNumbers.canIWin(numberPool3, 17));
}
Result:
Win
Lose
Draw
Lose
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
Win


评分

1

查看全部评分

数字媒体技术 发表于 2014-8-10 22:07:35 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
没弄懂?LZ是帮人店面去了?
回复 支持 反对

使用道具 举报

wondermu 发表于 2014-8-10 23:17:48 | 显示全部楼层
关注一亩三分地微博:
Warald
Draw 的情况可以单独拿出来吧,只要初始numberPool的sum小于target,就必是draw了;其他情况都不会是draw#在这里快速回复#
回复 支持 反对

使用道具 举报

wondermu 发表于 2014-8-11 00:10:11 | 显示全部楼层
wondermu 发表于 2014-8-10 23:17 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
Draw 的情况可以单独拿出来吧,只要初始numberPool的sum小于target,就必是draw了;其他情况都不会是draw# ...
. 鍥磋鎴戜滑@1point 3 acres
稍微调整了一下楼主的代码
enum Result {Win, Lose, Draw};

  Result canIWinsub(vector<int> numberPool, int target)
  {
          if(target<=0) return Lose;
          for(int i=0;i<numberPool.size();i++)
          {
                  if(numberPool==-1) continue;
                  int data=numberPool; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
                  numberPool=-1;
                  if(canIWinsub(numberPool,target-data)==Lose)
                          return Win;
                  numberPool=data;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
          }
          return Lose;
  }

  Result canIWin(vector<int> numberPool, int target)
  {. From 1point 3acres bbs
          int sum=0;.1point3acres缃
          for(int i=0;i<numberPool.size();i++)
                  sum+=numberPool;
          if(sum<target)
                  return Draw;. from: 1point3acres.com/bbs
          return canIWinsub(numberPool,  target);
  }
回复 支持 反对

使用道具 举报

huoshankou 发表于 2016-1-13 03:50:15 | 显示全部楼层
wondermu 发表于 2014-8-11 00:10
稍微调整了一下楼主的代码
enum Result {Win, Lose, Draw};
. Waral 鍗氬鏈夋洿澶氭枃绔,
这代码有bug。你跑下试试
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

custom counter

GMT+8, 2017-5-28 15:03

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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