---
# System prepended metadata

title: Untitled

---



## 問題

商品名と支払い金額を入力すると、お釣りの「小銭の枚数」を返す関数またはメソッドを実装せよ。商品名と価格は以下の通り。

 * お茶: 120円
 * コーラ: 150円
 * エナジードリンク: 280円

入力される通貨は日本円で、最大1000円までとする。
また、有効な貨幣は「1000円」「500円」「100円」「50円」「10円」とする。

たとえば、「1000円でお茶を購入」すると、返却すべき金額は880円だが、釣銭は「500円×1, 100円×3, 50円×1, 10円×3」となる。返り値は、任意の形式のクラス、連想配列、オブジェクト、構造体、リストなどで表現してよい。

PHPの擬似コードで書くと以下のようになる。

```php
function calcChange(string $item, int $paid_money): array {
    // ...
}

$expected = [500 => 1, 100 => 3, 50 => 1, 10 => 3];
assert($expected === calcChange("お茶", 1000));
```



/// code...
```go
import (
    "fmt"
)

type Change struct {
    1000yen int
    500yen int
    100yen int
    50yen int
    10yen int
}

// Total 合計金額の算出
func (*Change c) Total() int {
    return (c.1000yen * 1000) + (c.500yen * 500) + (c.100yen * 100) + (c.50yen * 50) + (c.10yen * 10)
}

var (
    CostTea = 120 // 御茶の値段
    CostCola = 150 // コーラの値段
    CostEnergy = 280 // エナジードリンクの値段
    
    teaName = "tea"
    colaName = "cola"
    energyName = "energy"
)


func init() {
    // nothing...
}

func main(){
    fmt.Println("STARTING...")
    fmt.Println("お茶のお釣りを算出...")
    paid := 500 // 払う金額
    
    change,err := calcChange(teaName, paid)
    if err != nil {
        panic(err)
    }
    fmt.Printf("払った金額 : %d, お釣りの結果 : %v¥n", CostTea, change)
    
}

func calcChange(itemType string ,paid int) (*Change,error) {
    itemCost := 0
    switch itemType {
    case teaName:
        itemCost = CostTea
    case colaName:
        itemCost = CostCola
    case energyName:
        itemCost = CotEnergy
    }
    if itemCost >= 1000 {
        return nil,fmt.Errorf("選択した金額が1000円を超えています")
        res := &Change{}
    }
    // 計算処理...
    
    // 1000円以上の場合
    for {
        if itemCost > 1000 {
            res.1000yen++
            itemCost = itemCost - 1000
        } else {
            break    
        }
    }
    
    // 500円以上の場合
    for {
        if itemCost > 500 {
            res.500yen++
            itemCost = itemCost - 500
        } else {
            break    
        }
    }
    
    // 100円以上の場合
    for {
        if itemCost > 100 {
            res.100yen++
            itemCost = itemCost - 100
        } else {
            break    
        }
    }
    
    // 50円以上の場合
    for {
        if itemCost > 50 {
            res.50yen++
            itemCost = itemCost - 50
        } else {
            break    
        }
    }
    
    // 10円以上の場合
    for {
        if itemCost > 10 {
            res.10yen++
            itemCost = itemCost - 10
        } else {
            break    
        }
    }
    
    return res,nil
}
```