예제 #1
0
 public static Wallet operator +(Wallet wallet1, Wallet wallet2)
 {
     Wallet resultwallet = new Wallet(wallet1.coins);
     foreach (var coin in wallet2.coins)
     {
         var c = resultwallet.CoinByValue(coin.value);
         if (c != null)
          {
              c.count += coin.count;
          }
          else
          {
              resultwallet.coins.Add(coin);
          }
     }
     return resultwallet;
 }
예제 #2
0
 public User()
 {
     wallet = new Wallet(coins);
 }
예제 #3
0
        // Возвращает кошелек с монетами, необходимыми для сдачи
        // int change - какую сумму надо вернуть
        // return - кошелек с набором монет
        public Wallet CoinsForChange(int change)
        {
            Wallet result = new Wallet();
            coins.Sort(Coin.CompareByValue);

            foreach(var coin in this.coins)
            {
                int coinCountNeed = change / coin.value;                      // количество монет текущего значения
                if (coinCountNeed > coin.count)
                {
                    coinCountNeed = coin.count;
                }
                if (coinCountNeed > 0)
                {
                    CoinSet c = new CoinSet(coin.value, coinCountNeed);
                    result.coins.Add(c);
                }
                change -= coinCountNeed * coin.value;
                if (change == 0) break;
            }
            if (change > 0) return null;
            return result;
        }
예제 #4
0
        public Wallet Substruct(Wallet p)
        {
            Wallet result = new Wallet();

            foreach (var coin in this.coins)
            {
                CoinSet c = p.CoinByValue(coin.value);
                if ( c != null ) coin.count -= c.count;
            }
            return result;
        }