zoukankan      html  css  js  c++  java
  • 零钱相加最少多少张

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

      

  • 相关阅读:
    商业智能领域需要了解的数据库优化理论
    动态监听与静态监听(转载)
    Oracle查看表结构的几种方法
    PLSQL Developer使用技巧整理
    Oracle数据库的三种验证机制
    EAV模型
    三门问题
    第一个python实例程序
    type()
    pi
  • 原文地址:https://www.cnblogs.com/yzg-14/p/12373124.html
Copyright © 2011-2022 走看看