• 零钱相加最少多少张


    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)
    		}
    
    	}
    }
    

      

  • 相关阅读:
    2017icpc青岛
    训练赛
    CF1598F
    CF1581
    CF1594
    CF1581D
    codeforces round 746 div2 C-E
    How I Think About Learning
    Linux Sysadmin Basics 4.1 -- Filtering Output and Finding Things (&&, cut, sort, uniq, wc, grep)
    Linux Sysadmin Basics 04 -- Shell Features -- Pipes and Redirection
  • 原文地址:https://www.cnblogs.com/yzg-14/p/12373124.html
Copyright © 2020-2023  润新知