public Wallet(List<CoinSet> wallet)
 {
     for (int i = 0; i < wallet.Count(); i++ )
     {
         CoinSet coin = new CoinSet(wallet[i].value, wallet[i].count);
         this.coins.Add(coin);
     }
 }
 public void AddCoin(CoinSet coin)
 {
     if (this.CoinByValue(coin.value) != null)
     {
         this.CoinByValue(coin.value).count += coin.count;
     }
     else
     {
         this.coins.Add(coin);
     }
 }
        // Возвращает кошелек с монетами, необходимыми для сдачи
        // 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;
        }