package main
import "fmt"
func main() {
/*
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。
如果没有任何一种硬币组合能组成总金额,返回 -1。
示例 1:
输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1
*/
/*
1.先把最大的数找出来,累加,超了就找小于自己的数
2.再继续找倒数第二大的数,累加,超了就找小于自己的数,。。。
*/
coins := []int{1, 2, 5}
amonut := 100 //20次
//标志位
flag := 0
//总金额
sum := 0
//5块
for amonut > sum {
max_sum := coins[2]
sum += max_sum
flag += 1
if amonut < sum {
//如果超过了就减去一次最大数
sum -= max_sum
flag -= 1
break
} else if amonut == sum {
fmt.Println(flag)
}
}
//3块
//减去一次最大数的sum肯定小于amonut
for amonut > sum {
max_sum_2 := coins[1]
sum += max_sum_2
flag += 1
if amonut < sum {
sum -= max_sum_2
flag -= 1
break
} else if amonut == sum {
fmt.Println(flag)
}
}
//1块
//减去一次 次 大数的sum肯定小于amonut
for amonut > sum {
max_sum_3 := coins[0]
sum += max_sum_3
flag += 1
if amonut < sum {
sum -= max_sum_3
flag -= 1
break
} else if amonut == sum {
fmt.Println(flag)
}
}
}