狭路相逢勇者胜

描述:

有两个战士在战斗,每个人每回合攻击一次,直到其中一人的血量<=0。写一个方法来返回胜利者的名字。现有一个Fighter类,如下:

public class Fighter {
  public string Name;
  public int Health, DamagePerAttack;
  public Fighter(string name, int health, int damagePerAttack) {
    this.Name = name;
    this.Health = health;
    this.DamagePerAttack = damagePerAttack;
  }
}

例如:

declareWinner(new Fighter(“佐助”, 10, 2), new Fighter(“鸣人”, 5, 4), “佐助”) => “佐助”

佐助攻击鸣人; 鸣人剩余三点血.
鸣人攻击佐助; 佐助剩余六点血.
佐助攻击鸣人; 鸣人剩余一点血.
鸣人攻击佐助; 佐助剩余二点血.
佐助攻击鸣人: 鸣人血量为-1,已死亡. 佐助胜出.

MyCode:

public class Kata {
  public static string declareWinner(Fighter fighter1, Fighter fighter2, string firstAttacker) 
  {
    int h1 = fighter1.Health,h2 = fighter2.Health;
    int a1 = fighter1.DamagePerAttack,a2 = fighter2.DamagePerAttack;

    while(h1 > 0 && h2 > 0)
    {
      if(fighter1.Name == firstAttacker)
      {
        h2 = h2 - a1;

        firstAttacker = fighter2.Name;
      }
      else
      {
        h1 = h1 - a2;

        firstAttacker = fighter1.Name;
      }
    }
    return h1 <= 0 ? fighter2.Name : fighter1.Name;
  }
}

CodeWar:

using System.Linq;

public class Kata 
{
  public static string declareWinner(Fighter fighter1, Fighter fighter2, string firstAttacker) 
  {  
    var fighters = new [] { fighter1, fighter2 };

    var Attacker = fighters.Single(f => f.Name == firstAttacker);
    var Defender = fighters.Single(f => f.Name != firstAttacker);
    Defender.Health -= Attacker.DamagePerAttack;
    if(Defender.Health <= 0)
    {
      return Attacker.Name;
    }
    return declareWinner(fighter1, fighter2, Defender.Name);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值